0

如果我有一個AsyncTask通過用戶交互在Activity開始。 AsyncTask完成後將修改UI並執行Toast。假設用戶在AsyncTask完成之前退出Activity。這可能會導致問題,如Exceptions:即,是否可能發生UI元素指針變爲空,並且在AsyncTask完成時它可能會導致運行時異常?如果Activity退出,AsyncTask是否可以導致問題?

因爲它是現在我已經做了設計,其中Application類處理AsyncTask並通過BroadcastReceiver通知Activity做UI的任務,如果Activity仍然是左右(即多個觀察員模式)。這是一個「更安全」的設計?

/Henrik

回答

2

我相信這會引起問題。如果創建AsyncTask的活動不在身邊,則會拋出異常,因爲父處理程序不再存在。正確的做法是將AsyncTask的引用保留在該活動中,並捕獲onPause()事件。在暫停事件中,我將取消AsyncTask並清理出現任何需要清理的內容。

要回答你的第二個問題,這一切都取決於什麼是要求。如果要求該任務仍然在附近,那麼可以將AsyncTask附加到應用程序中。但是這聽起來像是有些東西在這裏可能不正確。你說if Activity still is around。如果活動消失後不需要任務,那麼您最好使用原來的方法,即取消任務並在活動暫停時將其丟棄。

另外,最後一個註釋。如果即使在活動停止後仍保留對活動的引用,您將有內存泄漏,因爲該活動仍然有一個引用,直到該任務完成才能清除。

article聽起來與你正在做的相似。如果你真的想保持這個任務,這似乎是一個很好的解決方案。我還發現Android AsyncTask Context Terminated可能會幫助你。

相關問題