【问题标题】:Can AsyncTask started from Activity cause problems if Activity is exited?如果 Activity 退出,从 Activity 启动的 AsyncTask 会导致问题吗?
【发布时间】:2011-12-05 01:34:56
【问题描述】:

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

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

/亨里克

【问题讨论】:

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


    【解决方案1】:

    我相信这确实会导致问题。如果创建AsyncTask 的活动不再存在,则会引发异常,因为父处理程序不再存在。正确的方法是在该活动中保留AsyncTask 的引用,并捕获onPause() 事件。在暂停事件中,我将取消AsyncTask 并在有任何需要清理的情况下进行清理。

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

    另外,最后一点。如果在 Activity 停止后仍保留对 Activity 的引用,则会出现内存泄漏,因为该 Activity 仍然有一个在任务完成之前无法清理的引用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多