当前位置: 代码迷 >> 综合 >> [译] 使用AsyncTask的光明和黑暗面之二
  详细解决方案

[译] 使用AsyncTask的光明和黑暗面之二

热度:33   发布时间:2024-01-24 06:45:42.0

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销毁时取消下载任务。