Activity的生命周期理解
Activity擁有4個基本狀態:
活動狀態:當前Activity位于前臺,可以看見也可以獲得焦點,可以接受用戶輸入的
暫停狀態:其他Activity位于前臺,該Activity依然可見,但是不能獲得焦點(比如一個非全屏或者透明的Activity在你的Activity的上方擁有焦點),它的狀態是暫停的。一個暫停狀態下的Activity是活著的,但在系統極端低的狀態下可以被殺死
停止狀態:當一個Activity完全被另一個Activity遮蓋,它的狀態是停止的。該Activity不可見,失去焦點。這種狀態很容易被系統殺死
銷毀狀態:該Activity被系統 結束,該Activity結束或Activity所在的Dalvik進程被結束
Activity的生命周期圖:
我們來說一下Activity的生命周期過程:
運行-暫停-運行:
onCreate->onStart->onResume->onPause->onResume
1.啟動Activity:系統會先調用onCreate方法,然后調用onStart方法,最后調用onResume,Activity進入運行狀態。
2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。
3.當前Activity由被覆蓋狀態回到前臺或解鎖屏:系統會調用onResume方法,再次進入運行狀態。
運行-停止-運行:
onCreate->onStart->onResume->onPause->onStop->onRestart->onStart->onResume
4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居后臺,不可見失去焦點:系統會先調用onPause方法,然后調用onStop方法,進入停滯狀態。
5.用戶后退回到此Activity:系統會先調用onRestart方法,然后調用onStart方法,最后調用onResume方法,再次進入運行狀態。
運行-銷毀:
6.當前Activity處于被覆蓋狀態或者后臺不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而后用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。
7.用戶退出當前Activity:系統先調用onPause方法,然后調用onStop方法,最后調用onDestory方法,結束當前Activity。
Activity有三個關鍵的循環:
整個的生命周期,從onCreate(Bundle)開始到onDestroy()結束。Activity在onCreate()設置所有的“全局”狀態,在onDestory()釋放所有的資源。例如:某個Activity有一個在后臺運行的線程,用于從網絡下載數據,則該Activity可以在onCreate()中創建線程,在onDestory()中停止線程。
可見的生命周期,從onStart()開始到onStop()結束。在這段時間,可以看到Activity在屏幕上,盡管有可能不在前臺,不能和用戶交互。在這兩個接口之間,需要保持顯示給用戶的UI數據和資源等,例如:可以在onStart中注冊一個IntentReceiver來監聽數據變化導致UI的變動,當不再需要顯示時候,可以在onStop()中注銷它。onStart(),onStop()都可以被多次調用,因為Activity隨時可以在可見和隱藏之間轉換。
前臺的生命周期,從onResume()開始到onPause()結束。在這段時間里,該Activity處于所有 Activity的最前面,和用戶進行交互。Activity可以經常性地在resumed和paused狀態之間切換,例如:當設備準備休眠時,當一個 Activity處理結果被分發時,當一個新的Intent被分發時。所以在這些接口方法中的代碼應該屬于非常輕量級的。
MainActivity.java
package com.example.activitylifecircle;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;public class MainActivity extends Activity {final String TAG="-Activity State-";Button finish,start;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.d(TAG, "--OnCreate--");finish=(Button) findViewById(R.id.button1);start=(Button) findViewById(R.id.button2);start.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent=new Intent(MainActivity.this,SecondActivity.class);startActivity(intent);}});finish.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//結束該ActivityMainActivity.this.finish();}});}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.d(TAG, "--OnStart--");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();Log.d(TAG, "--OnRestart--");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.d(TAG, "--OnResume--");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.d(TAG, "--OnPause--");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.d(TAG, "--OnStop--");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.d(TAG, "--OnDestroy--");}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);} }
總結
以上是生活随笔為你收集整理的Activity的生命周期理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 启动Activity的两种方式start
- 下一篇: 通过 Intent 传递类对象