相关疑难解决方法(0)

Honeycomb Loaders可以解决AsyncTask + UI更新的问题吗?

在后台执行某些操作然后更新UI很难在Android中正确实现.它设计得很糟糕.典型的例子是AsyncTask,它从Web获取内容并显示结果.这有两个问题:

  1. AsyncTask引用了Activity(因为它需要更新其UI).屏幕方向更改后,重新启动活动.但是AsyncTask仍然引用旧的被破坏的Activity,因此无法更新新Activity的UI.

  2. 这可能导致OutOfMemoryException.想象一下,你有一个包含大量位图的Activity,并启动一些AsyncTask.您按BACK(活动已完成)但AsyncTask仍在运行,并且因为它引用了Activity,所以带有位图的Activity仍在内存中.重复此操作(开始活动和返回),你的力量迟早会关闭.

这可以解决,但它太复杂了.在一个Activity中,我有3个不同的AsyncTasks,每个都可以同时在多个实例中运行.正确实现这一点令人沮丧.代码变得非常难以理解和调试.

Honeycomb Loaders可以解决这个问题吗?有没有办法在pre-Honeycomb Android版本中使用它们?

android android-3.0-honeycomb android-loader

13
推荐指数
1
解决办法
2583
查看次数

是否仍然建议在后台加载listView项目使用AsyncTask?

背景

我听说有一些新的解决方案可以在后台加载数据,这比AsyncTask(比如加载器)更值得推荐.

问题

AsyncTasks很棒且易于使用.但是,它有一些局限性:

  1. 类本身必须进行修改,因为它受到待处理任务数量的限制(约256左右).当然,在listView的适配器中,如果不需要,我总是取消任务(例如,当我需要更新用于其他项目的视图时).

  2. 在重新创建活动/片段时,我还必须全部取消它们(或以不同的方式处理).

  3. 由于1和2,我需要管理它们并参考所有这些

  4. AsyncTask使用一个任务队列,有时我需要使用堆栈,所以我不得不创建自己的AsyncTask类,而不是使用堆栈.

这个问题

是否有AsyncTask的替代品?

我知道之前曾在某些帖子中提到这个问题(比如这里),但我在想是否有一种新的通用方法可以在后台加载数据来替换asyncTask.

关于Loaders,我认为这个想法是它们用于数据库和contentProviders,但它们是否也可以用于从Internet上加载(例如)数据(如图像文件)?

还有一个很好的样本由谷歌(这里称为"bitmapFun"),根据我所看到的使用AsyncTask(甚至扩展它,可能是因为我提到的相同的原因).但也许我也错过了一些东西?

android android-listview android-asynctask android-loader

6
推荐指数
1
解决办法
2582
查看次数