我有一個簡單的Hello World應用程序爲什麼應用程序及其資源在Android中退出後會保留在內存中?
public class TestLeaksOnFinish extends Activity
{
static int ctr = 0;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView t = new TextView(this);
t.setText("Hello World! "+ctr++);
setContentView(t);
}
}
當我運行這個多次,每次依次按下BACK,我看到的點擊率,每次增加,表明該活動尚未完全殺死後返回。
這也可以通過在按BACK鍵後在DDMS中轉儲HPROF文件來確認。
該文件仍包含我的TestLeaksOnFinish活動類。
有人可以解釋爲什麼在按下BACK之後,此活動仍存在於堆轉儲中嗎?
當我列出傳入引用,我得到以下
當按下後退鍵時,你確定調用了finish()嗎?也許Android只是暫停應用程序並在之後恢復。此外,'ctr'是一個靜態字段 - 它們以泄漏而聞名。 –
靜態原語不會泄漏活動 – FunkTheMonk
@MichellBak finish()被調用(這是onBackPressed()的默認實現,但我只是爲了確定而忽略它)。 onPause和onDestroy也被調用。另外,如果我讓ctr不再是靜態的,我會在堆轉儲中獲得相同的數據。當多次運行應用程序時,ctr本身始終爲零,表示每次都會創建一個新實例(如預期的那樣),這仍然讓我想知道爲什麼舊的實例會保存在內存中,因爲它不再被使用。 –