AsyncTask的具体实现
实现AsyncTask很简单:创建一个子类,重写doInBackground进行后台执行,并在后台任务执行之前,执行期间和执行之后为任何所需的UI更新添加帮助器方法。 尽管它很简单,但是还有一些要考虑的事项:
- 避免内存泄漏
只要工作线程是活动的,它所引用的所有对象都保存在内存中,
因此,AsyncTask应该声明为一个独立的或静态的内部类,以便工作线程避免对外部类的隐式引用
- 与Context及其生命周期的耦合
AsyncTask通常向可能引用Context的UI线程发出更新,该UI线程通常是指是具有View视图的Activity。但是您应该避免在AsyncTask中引用View视图,这样View视图就不会在不需要的时候保存在内存中。因此,AsyncTask应该声明为一个静态内部类,该类持有对相关Context的引用。当不再需要引用时,通过将其设置为null来删除引用。
- 取消策略
合理运用取消策略中断或取消正在执行的后台任务
Example:Download Images
这个示例显示了如何在Activity中使用AsyncTask从网络下载图像。界面由一个进度条(一个mprogressbar,它显示下载的图像的数量)和一个Layout(使用mlayoutImages,它的子元素构成下载的图像)组成。
在Activity创建时,下载任务开始执行,并在Activity销毁时取消下载任务。