您好,登錄后才能下訂單哦!
Activity和所有的生物一樣,也有生老病死這一說,這就是我們將要了解的Activity生命周期的概念。
一:生命周期
Activity的生命周期如下圖所示:
Activity的生命周期分為四個階段
(1)運(yùn)行態(tài):
應(yīng)用程序啟動之后,若Activity處于屏幕的最前端,可以與用戶進(jìn)行交互的界面,我們說其具有運(yùn)行態(tài)。一個Activity從創(chuàng)建到運(yùn)行態(tài),需要經(jīng)歷onCreate-->onStart-->onResume三個階段
(2)暫停態(tài):
Activity被置于后臺,但是用戶仍然可見,失去焦點(diǎn),只是暫時不能進(jìn)行交互,調(diào)用onPause()進(jìn)入暫停態(tài)。進(jìn)入暫停態(tài)的Activity,若想重新回到運(yùn)行態(tài),需要調(diào)用onResume()方法
(3)停止態(tài):
Activity被置于后臺,完全被其他Activity擋住,失去焦點(diǎn),不能交互,調(diào)用onStop()進(jìn)入停止態(tài)。若想重新回到運(yùn)行態(tài),需經(jīng)過onRestart()-->onStart()-->onResume()三個階段,此時應(yīng)注意實行onRestart方法之后程序進(jìn)入到的是onStart而不是onCreate。也就是說:onCreate()方法,只被執(zhí)行一次,onResume()無論在什么狀態(tài)均需要執(zhí)行,onStart()旨在創(chuàng)建和onestart()之后執(zhí)行一次。
(4)終止態(tài):
Activity被終止,比如點(diǎn)擊“返回”鍵之后,將結(jié)束程序的執(zhí)行,調(diào)用onDestory()方法,進(jìn)入到終止態(tài)。若想重新回到運(yùn)行態(tài),需重新定義Activity。
二:作用
清晰的區(qū)分Activity的生命周期,在以后的編程操作中,我們可以清晰的知道哪些操作應(yīng)該在哪些狀態(tài)下運(yùn)行。比如某功能,要求用戶第一次登陸時要注冊,在此登陸的時候則直接跳入,這樣的功能我們應(yīng)該在onCreate方法中是實現(xiàn),因為onCreate在應(yīng)用程序的執(zhí)行中,只運(yùn)行一次。
三:生命周期的調(diào)用時機(jī)
1:調(diào)用時機(jī)
這六個方法,不需要用戶手動調(diào)用,由系統(tǒng)自動調(diào)用。然而不同的方法調(diào)用的時機(jī)卻不相同。
測試方法:創(chuàng)建工程,在主界面中,重寫六個方法,添加輸出語句,執(zhí)行程序,按上述幾種狀態(tài),分別測試程序,看后臺輸出即可驗證結(jié)果。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("onCreate"); } @Override protected void onStart() { super.onStart(); System.out.println("onStart"); } @Override protected void onResume() { super.onResume(); System.out.println("onResume"); } @Override protected void onRestart() { super.onRestart(); System.out.println("onRestart"); } @Override protected void onPause() { super.onPause(); System.out.println("onPause"); } @Override protected void onStop() { super.onStop(); System.out.println("onStop"); } @Override protected void onDestroy() { super.onDestroy(); System.out.println("onDestory"); } } |
測試結(jié)果:
①程Activity動,自動依次進(jìn)入onCreate-->onStart-->onResume三個狀態(tài) ②按home鍵,Activity全被擋住,依次進(jìn)入到onPause-->onStop兩個狀態(tài) ③按返回鍵,終止程序執(zhí)行,依次進(jìn)入到onPause-->onStop-->onDestory狀態(tài) ④長按home鍵,重新執(zhí)行程序,依次進(jìn)入到onRestart-->onStart-->onResume三個狀態(tài) |
2: 思考
單擊A頁面按鈕實現(xiàn)從頁面A到頁面B的跳轉(zhuǎn),此時兩個Activity處于生命周期的什么狀態(tài)下呢?
解決辦法:
(1) 創(chuàng)建工程,編寫自定義Act2,在Act2中添加如上代碼
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act2); System.out.println("2----onCreate"); } @Override protected void onStart() { super.onStart(); System.out.println("2----onStart"); } @Override protected void onResume() { super.onResume(); System.out.println("2----onResume"); } @Override protected void onRestart() { super.onRestart(); System.out.println("2----onRestart"); } @Override protected void onPause() { super.onPause(); System.out.println("2----onPause"); } @Override protected void onStop() { super.onStop(); System.out.println("2----onStop"); } @Override protected void onDestroy() { super.onDestroy(); System.out.println("2----onDestory"); } |
(2)在主界面上,添加跳轉(zhuǎn)的實現(xiàn)及其他生命周期方法
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("1----onCreate"); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent i = new Intent(MainActivity.this,Act2.class); startActivity(i); } }); } @Override protected void onStart() { super.onStart(); System.out.println("1----onStart"); } @Override protected void onResume() { super.onResume(); System.out.println("1----onResume"); } @Override protected void onRestart() { super.onRestart(); System.out.println("1----onRestart"); } @Override protected void onPause() { super.onPause(); System.out.println("1----onPause"); } @Override protected void onStop() { super.onStop(); System.out.println("1----onStop"); } @Override protected void onDestroy() { super.onDestroy(); System.out.println("1----onDestory"); } |
(3)運(yùn)行工程,點(diǎn)擊按鈕,觀看控制臺,結(jié)果如下:
08-20 13:46:26.842: I/System.out(279): 1----onPause 08-20 13:46:26.875: I/System.out(279): 2----onCreate 08-20 13:46:26.875: I/System.out(279): 2----onStart 08-20 13:46:26.875: I/System.out(279): 2----onResume 08-20 13:46:27.212: I/System.out(279): 1----onStop |
答案:由于此時A界面正在被B界面覆蓋,所以A界面先進(jìn)入到onpause狀態(tài),隨后B界面啟動,進(jìn)入onCreate-->onStart-->onResume三個狀態(tài),之后A界面被完全擋住,A界面到達(dá)onStop狀態(tài)。
Activity生命周期十分重要,要重點(diǎn)掌握,以后我們會經(jīng)常用到的,注意產(chǎn)生時機(jī)與作用,注意區(qū)別哦。。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。