Android:Activity结束时AsyncTask的最佳实践

时间:2012-02-26 21:55:44

标签: android

我在几个地方使用AsyncTasks来进行冗长的数据库查询,然后在PostExecute中填充结果数据视图。但是当它到达那里时,用户可以在我的应用程序中切换屏幕(片段),甚至“退出”应用程序回到启动器。

现在我使用一种有点kludgey的方法,以便AsyncTask可以在进行更新之前检查Activity是否仍然存在。但这真的有必要吗?似乎只要任务处于活动状态,各种View对象仍然存在,所以更新它们虽然无用,但不会对任何事情造成伤害。

在这方面,任何人都有一些关于协调AsyncTasks行动的想法吗?

2 个答案:

答案 0 :(得分:2)

保持对已结束活动的引用可能会导致严重的内存问题,因为它会阻止与活动相关的所有内容被gc化。在这个问题上,Android Developer的小组有一个有趣的主题;我认为最有用的帖子是here

另外,请参阅this thread以获取有关AsyncTask中的缺陷以及如何处理它们的更多信息。

编辑:Santiago Lezica还有this useful blog post特定于将AsyncTask与已调用setRetainInstance(true);的片段一起使用。

答案 1 :(得分:0)

由于您的后台任务几乎仅限于数据库查询,因此我建议您使用CursorLoader代替原始AsyncTask来查询数据。如果您不是以3.0为目标,则仍可以通过兼容性库使用它们。它们专为此目的而设计;允许系统管理后台任务和Cursor

Loader协议通过LoaderManager进行通信,该Activity绑定到Loader并处理是否触发回调,因此您无需担心取消注册,并且如果用户在最新刷新完成之前离开,则无所谓。

要阅读有关实施{{1}}的更多信息,请阅读相关的开发者指南: http://developer.android.com/guide/topics/fundamentals/loaders.html

HTH