Archive for 六月 2014

Android开发:在后台服务中运行-报告工作状态

本节讲运行在后台服务里的工作请求,如何向发送请求者报告状态。推荐用LocalBroadcastManager发送和接收状态,它限制了只有本app才能接收到广播。 Continue reading ‘Android开发:在后台服务中运行-报告工作状态’ »

Android开发:在后台服务中运行-发送工作请求给后台服务

上节讲了如何创建IntentService。本节讲如何通过发送Intent触发IntentService执行操作。Intent可以包含任意数据。你可以在Activity或Fragment的任意位置发送Intent给IntentService。 Continue reading ‘Android开发:在后台服务中运行-发送工作请求给后台服务’ »

Android开发:在后台服务中运行-创建后台服务

翻自:http://developer.android.com/training/run-background-service/create-service.html

IntentService提供了在单个后台线程运行操作的简单结构。这允许它操作耗时操作,而不影响UI响应。同样,IntentService也不影响UI生命周期事件,所以,它在某些可能关闭AsyncTask的情况下,仍会继续运行(实测在Activity的onDestory里写AsyncTask无法运行)。

IntentService有如下限制:

  • 它不能直接影响UI。要把结果反映给UI,需要发给Activity
  • 工作请求会顺序运行。如果一个操作未结束,后面发送的操作必须等它结束(单线程)
  • IntentService里运行的操作无法被中断

然而,在大多数情况下,IntentService是简单后台任务的首选方式。

本节展示了如何创建IntentService的子类,如何创建onHandleIntent()回调,如何在AndroidManifest.xml声明IntentService。 Continue reading ‘Android开发:在后台服务中运行-创建后台服务’ »

Android开发:后台任务最佳实践-在后台服务中运行

翻自:http://developer.android.com/training/run-background-service/index.html
除非特别指定,否则,大多数默认的操作都是在前台(UI线程)运行的。这可能会让UI响应慢,甚至ANR。Android提供了几个类来帮助你把任务分到后台运行的独立线程里。最有用的是IntentService.

本课讲了如何实现IntentService,发送工作请求,把结果反馈给其他组件。 Continue reading ‘Android开发:后台任务最佳实践-在后台服务中运行’ »

Android开发:性能最佳实践-保持应用响应

翻自:http://developer.android.com/training/articles/perf-anr.html
App里发生的最糟糕的事是弹出应用无响应"Application Not Responding" (ANR) 对话框.本课讲的是如何保持应用响应,避免ANR。 Continue reading ‘Android开发:性能最佳实践-保持应用响应’ »

Android开发:多线程操作-与UI线程通讯

翻自:http://developer.android.com/training/multiple-threads/communicate-ui.html
本节向你展示如何在任务中发送数据给UI线程里的对象,这个特性允许你在后台线程工作,完了在UI线程展示结果。 Continue reading ‘Android开发:多线程操作-与UI线程通讯’ »

Android开发:多线程操作-在线程池里运行代码

翻自:http://developer.android.com/training/multiple-threads/run-code.html

本节展示如何在线程池里执行任务。流程是,添加一个任务到线程池的工作队列,当有线程可用时(执行完其他任务,空闲,或者还没执行任务),ThreadPoolExecutor会从队列里取任务,并在线程里运行。
本课同时向你展示了如何停止正在运行的任务。 Continue reading ‘Android开发:多线程操作-在线程池里运行代码’ »

Android开发:多线程操作-创建多线程管理器

翻自:http://developer.android.com/training/multiple-threads/create-threadpool.html
如果你要反复执行一个任务,用不同的数据集(参数不同),但一次只要一个执行(任务是单线程的),IntentService符合你的需求。当需要在资源可用时自动执行任务,或允许多任务同时执行,你需要一个线程管理器管理你的线程。ThreadPoolExecutor,会维护一个队列,当它的线程池有空时,从队列里取任务,并执行。要运行任务,你要做的就是把它加到队列里。

线程池可以并联运行一个任务的多个实例,所以你要保存代码线程安全。能被多线程访问的变量需要同步块.更多信息,见Processes and Threads Continue reading ‘Android开发:多线程操作-创建多线程管理器’ »