17 December 2011
前一篇已經簡略的說明Android Activity Life Cycle,
這篇將詳細說明Activity在Android 裡記憶體life cycle的呈現,



假設我有2個 Activity ,分別是A(主畫面)、B(子畫面),
A中有一個按鈕,可以換頁面到B
startActivity(new Intent(A.this, B.class));


B中有一個按鈕,可以換頁面到A
startActivity(new Intent(B.this, A.class));



且A為app進入點
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>



執行此app時,記憶體的表現會如下圖:






如果這時候在A畫面按下換頁面至B的按鈕,
則記憶體的狀態如下圖
A會先去call onPause->onStop
注意!!! 並沒有onDestroy,A這個物件是還存在的
























如果這時候在B畫面按下手機上的"【返回】按鈕,
則記憶體的狀態如下圖
B會先去call onPause -> onStop -> onDestroy
注意!!! 這裡有onDestroy,此時B物件是被銷毀的,
這個情況應該是正常的life cycle,
可是有些人會用換頁的方式(startActivity)回到上一個畫面,
在我的觀念裡,會不建議這樣的行為,繼續往下看!






















如果這時候在B畫面,而且想要回到A畫面,
B畫面(下圖)中左上角,有一個自己做的返回按鈕,
則此時這返回按鈕的code為
startActivity(new Intent(B.this, A.class));

當使用者按下這個按鈕時!






























則此時記憶體的狀態如下圖!
B會進入到onStop的狀態!
且會有一個新的A畫面(橘色)!!!
則此時舊的A畫面(藍色)就會存在記憶體裡,暫時無法回收....






















因此不建議用這種方式回到上一個畫面,
會講這篇的原因,是為了稍後的另一篇,
要講解Bitmap recycle和 Out of Memory (OOM)的問題!
在做recycle時,得去考慮到整體life cycle的問題才行!








blog comments powered by Disqus