如果退出Activity,AsyncTask是否可以从Activity导致问题?

时间:2011-12-04 17:14:19

标签: android exception user-interface android-activity android-asynctask

如果我通过用户互动在AsyncTask中启动ActivityAsyncTask完成后,将修改UI并执行Toast。假设用户在Activity完成之前退出AsyncTask。这会导致问题,如Exceptions:I.e。可能会发生UI元素指针变为null并且当AsyncTask完成时它可能导致运行时异常吗?

现在我已经完成了Application类处理AsyncTask的设计,并通过Activity通知BroadcastReceiver执行UI任务{} Activity 1}}仍然存在(即更多的观察者模式)。这是一种“更安全”的设计吗?

/亨里克

1 个答案:

答案 0 :(得分:2)

我相信这确实会引起问题。如果创建AsyncTask的活动不再存在,则抛出异常,因为父处理程序不再存在。正确的方法是在该活动中保留AsyncTask的引用,并捕获onPause()事件。在暂停事件中,我会取消 AsyncTask并清除是否有任何需要清理的内容。

要回答你的第二个问题,一切都取决于要求是什么。如果该任务的要求仍然存在,则可以将AsyncTask附加到应用程序。但听起来这里有些东西可能不正确。你说if Activity still is around。如果您在活动消失后不需要任务,那么您最好采用我原来的方法取消任务,并在活动暂停时将其丢弃。

另外,最后一点说明。如果即使在活动停止后仍保留对活动的引用,您将发生内存泄漏,因为该活动仍具有在任务完成之前无法清除的引用。

article听起来与您正在做的相似。如果你真的想保持这个任务,那么这似乎是一个很好的解决方案。我还发现Android AsyncTask Context Terminated可能会对您有所帮助。