如何在活动完成时让AsyncTask取消自身

时间:2011-03-18 19:11:05

标签: android multithreading android-activity android-asynctask


我正在开发一个ListActivity,它在列表的每个项目中都显示了一堆信息 由于收集要显示在列表的每个条目中的数据(来自SD卡的缩略图和来自DB的计数)是时间密集的,我考虑使用AsyncTasks从负载中释放主线程并允许用户真正滚动列表快速而不滞后。

我考虑过在我的条目中使用视图标记来取消滚动屏幕后重复使用的条目的AsyncTasks。
类似的东西:

public void bindView(View view, Context context, Cursor cursor) {
    [...]
    MyAsyncTask t (MyAsyncTask) myImageView.getTag();
    if (t != null) {
        t.cancel(true);
        t = null;
    }
    t = new MyAsyncTask();
    myImageView.setTag(t);
    t.execute();
    [...]
}

该部分应该有效,但我的问题是活动完成或用户更改方向。我宁愿避免保留我的AsyncTasks的数组或哈希映射,只是为了能够在onPause或onStop中取消它们。
从我在网上做的阅读中,AsyncTasks将在方向更改或活动结束后继续在后台运行,甚至最糟糕的是它会使活动保持活动状态,防止它被垃圾收集(这绝对不是我想要的。)< / p>

关于如何做到这一点的任何想法或建议?
我应该使用除AsyncTasks以外的其他东西吗?

1 个答案:

答案 0 :(得分:0)

我考虑用一个AsyncTask替换AsyncTask s的数组。 onProgressUpdate可以在这里提供帮助。