如果我通过用户互动在AsyncTask
中启动Activity
。 AsyncTask
完成后,将修改UI并执行Toast
。假设用户在Activity
完成之前退出AsyncTask
。这会导致问题,如Exceptions
:I.e。可能会发生UI元素指针变为null并且当AsyncTask
完成时它可能导致运行时异常吗?
现在我已经完成了Application
类处理AsyncTask
的设计,并通过Activity
通知BroadcastReceiver
执行UI任务{} Activity
1}}仍然存在(即更多的观察者模式)。这是一种“更安全”的设计吗?
/亨里克
答案 0 :(得分:2)
我相信这确实会引起问题。如果创建AsyncTask
的活动不再存在,则抛出异常,因为父处理程序不再存在。正确的方法是在该活动中保留AsyncTask
的引用,并捕获onPause()
事件。在暂停事件中,我会取消 AsyncTask
并清除是否有任何需要清理的内容。
要回答你的第二个问题,一切都取决于要求是什么。如果该任务的要求仍然存在,则可以将AsyncTask
附加到应用程序。但听起来这里有些东西可能不正确。你说if Activity still is around
。如果您在活动消失后不需要任务,那么您最好采用我原来的方法取消任务,并在活动暂停时将其丢弃。
另外,最后一点说明。如果即使在活动停止后仍保留对活动的引用,您将发生内存泄漏,因为该活动仍具有在任务完成之前无法清除的引用。
此article听起来与您正在做的相似。如果你真的想保持这个任务,那么这似乎是一个很好的解决方案。我还发现Android AsyncTask Context Terminated可能会对您有所帮助。