2016-03-16 23 views
3

從長遠來看,AsyncTask會產生一個內存泄漏:如果AsyncTask長時間持續 ,它會保持活動「活躍」,而Android想要 擺脫它,因爲它不能再顯示。該活動不能被 垃圾收集,這是Android的一箇中心機制,通過 可以保留設備上的資源。如果Asynctask正在運行,那麼即使在finish()方法之後,活動仍然活着?

這是否意味着,如果我們調用finish()方法的AsyncTask運行,然後也活動將繼續「活着」嗎?如果沒有,那麼這是什麼意思

如果的AsyncTask持續多久,它保持活動「活着」?

活動一定會健在,除非我們稱之爲finish()方法或我們按回button.Does這意味着,如果asyntask運行,然後將活動即使以後還活着?

+0

我真的不知道,但我的理解是,隨着的AsyncTask運行活動將留只要活着,系統會自動doesn't完成它。 Android系統是一種「自我清潔」機制,如果緊急需要資源,它可以殺死未使用的應用程序,甚至可以運行應用程序。但是如果您完成活動,我認爲活動已被破壞,因爲您直接由自己而不是從系統調用它。如果您按下後退按鈕,通常不會銷燬活動,除非您在onBackButtonPress()中調用finish()。 – Opiatefuchs

回答

11

如果一個的AsyncTask被聲明爲活動內的非靜態內部類,這意味着它總是保持強引用在創建它包圍外部類。因此,只要AsyncTask正在運行,它就擁有對活動的強引用,這意味着即使在調用finish()和執行onDestroy()之後也不會收集垃圾。這是AsyncTask的一個非常常見的問題,它沒有正確實施以防止這種情況發生。

+0

精心製作。 –

+0

這應該是公認的答案。 – toantran

相關問題