標籤:tle 執行 use ima 生命週期 resume out public .com
1. 為什麼研究Activity什麼周期
- Activity是Android四大組件之一,是Android人必須要深刻理解的基礎內容之一。
- 可以提高我們對相關問題的解決能力。
- 對一個問題如果不能深入理解,總覺得不踏實。
2. Activity生命週期詳解 2.1 Activity生命週期圖解
是Android開發官網的原圖,清晰表達了Activity生命週期中每個方法所處位置及調用流程。
對Activity的執行流程表達很到位,但是對每個方法在執行時,我們的裝置處於一種什麼狀態,其中注釋表達的不是很細緻,有待進一步深入研究。
2.2 Activity生命週期核心方法詳解
下表是Android官網對Activity生命週期中各個方法的詳解。
註:通過上面表格中的資訊描述我們不難發現一下幾點:
- 當Activity調用完onResume()方法後Activity就將處於可見狀態,可以與使用者互動了。
- onStop()方法是在Activity完全不可見時才調用的。
- 當調用完onPause()方法後Activity是可以被殺掉的,這也就意味著可能不會調用 onStop()和 onDestroy()。因此,您應該在調用 onPause()向存放裝置寫入至關重要的持久性資料(例如使用者編輯)。
- 應該對 onPause()調用期間必須保留的資訊有所選擇,因為該方法中的任何阻止過程都會妨礙向下一個 Activity 的轉變並拖慢使用者體驗。
3. 通過一個生命週期執行個體來加深一下印象 3.1 執行個體代碼
有兩個Activity,MainActivity和TwoActivity,其代碼如下,後面將執行幾個常見的操作,看看其生命週期流程究竟如何運行。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn_onClick).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, TwoActivity.class)); } }); Log.i("info", "MainActivity --> onCreate()"); } @Override protected void onStart() { super.onStart(); Log.i("info", "MainActivity --> onStart()"); } @Override protected void onResume() { super.onResume(); Log.i("info", "MainActivity --> onResume()"); } @Override protected void onRestart() { super.onRestart(); Log.i("info", "MainActivity --> onRestart()"); } @Override protected void onPause() { super.onPause(); Log.i("info", "MainActivity --> onPause()"); } @Override protected void onStop() { super.onStop(); Log.i("info", "MainActivity --> onStop()"); } @Override protected void onDestroy() { super.onDestroy(); Log.i("info", "MainActivity --> onDestroy()"); }}
public class TwoActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two_layout); Log.i("info", "TwoActivity --> onCreate()"); } @Override protected void onStart() { super.onStart(); Log.i("info", "TwoActivity --> onStart()"); } @Override protected void onRestart() { super.onRestart(); Log.i("info", "TwoActivity --> onRestart()"); } @Override protected void onResume() { super.onResume(); Log.i("info", "TwoActivity --> onResume()"); } @Override protected void onPause() { super.onPause(); Log.i("info", "TwoActivity --> onPause()"); } @Override protected void onStop() { super.onStop(); Log.i("info", "TwoActivity --> onStop()"); } @Override protected void onDestroy() { super.onDestroy(); Log.i("info", "TwoActivity --> onDestroy()"); }}
3.2 啟動MainActivity
結果預測:
MainActivity --> onCreate()
MainActivity --> onStart()
MainActivity --> onResume()
真實結果:
果然一致。
3.3 MainActivity到TwoActivity
結果預測:
MainActivity –> onPause()
TwoActivity –> onCreate()
TwoActivity –> onStart()
TwoActivity –> onResume()
MainActivity –> onStop()
真實結果:
和預測順序一致。
3.4 從TwoActivity返回到MainActivity
結果預測:
TwoAcitvity –> onPause()
MainActivity –> onRestart()
MainActivity –> onStrat()
MainActivity –> onResume()
TwoActivity –> onStop()
TwoActivity –> onDestroy()
真實結果:
順序一致,證明理論是正確的。
3.5 從MainActivity返回案頭
結果預測:
MainActivity –> onPause()
MainActivity –> onStop()
MainActivity –> onDestroy()
真實結果:
【Android】Activity生命週期研究