Android:日常学习笔记(6)——探究活动(3)
Android:日常學(xué)習(xí)筆記(6)——探究活動(dòng)(3)
活動(dòng)的生命周期
返回棧
Android中的活動(dòng)是可以疊加的,我們每啟動(dòng)一個(gè)新活動(dòng),就會(huì)覆蓋在原來(lái)的活動(dòng)上,點(diǎn)擊Back以后銷(xiāo)毀最上面的活動(dòng),下面的活動(dòng)就會(huì)重新顯現(xiàn)出來(lái)。Android是使用任務(wù)(Task)來(lái)管理活動(dòng)的,一個(gè)任務(wù)就是一組存放在棧里的活動(dòng)的集合。
默認(rèn)情況下,每當(dāng)我們啟動(dòng)一個(gè)新的活動(dòng),他會(huì)在返回棧中入棧,并處于棧頂位置。而每當(dāng)我們按下Back或者Finish以后,處于棧頂位置的活動(dòng)會(huì)出棧。
活動(dòng)的狀態(tài)
運(yùn)行狀態(tài)(棧頂?shù)脑?、暫停狀態(tài)(不在棧頂?shù)匀豢梢?jiàn),如對(duì)話框)、停止?fàn)顟B(tài)(不在棧頂并完全不可見(jiàn),有可能被系統(tǒng)回收)、銷(xiāo)毀狀態(tài)(從返回棧中移除后)。
活動(dòng)的生存期
? onCreate():他會(huì)在活動(dòng)第一次被調(diào)用的時(shí)候創(chuàng)建。
? onStart():活動(dòng)由不可見(jiàn)變?yōu)榭梢?jiàn)時(shí)調(diào)用。
? onResume():活動(dòng)準(zhǔn)備好與用戶進(jìn)行交互時(shí)調(diào)用,此時(shí)活動(dòng)一定位于返回棧的棧頂。并處于運(yùn)行狀態(tài)。
? onPause():在系統(tǒng)準(zhǔn)備好去啟動(dòng)或者恢復(fù)另一個(gè)活動(dòng)的時(shí)候調(diào)用,一般在此將一些消耗CPU的資源釋放掉。
? onStop():這個(gè)方法在活動(dòng)完全不可見(jiàn)的時(shí)候調(diào)用。
? onDestory():這個(gè)方法在活動(dòng)被銷(xiāo)毀之前調(diào)用。
? onRestart():這個(gè)方法在活動(dòng)由停止轉(zhuǎn)變?yōu)檫\(yùn)行狀態(tài)之前調(diào)用,也即是活動(dòng)被重新啟動(dòng)了。
體驗(yàn)活動(dòng)的生命周期
1.我們新建三個(gè)活動(dòng)
說(shuō)明:
對(duì)話框活動(dòng)我們需要在AndroidManifest中進(jìn)行設(shè)置。?
2.在主活動(dòng)中設(shè)置啟動(dòng)其余活動(dòng),且重載生存期方法
package com.example.zy.android2;import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button startNormal = (Button) findViewById(R.id.start_normal_activity);Button startDialog = (Button) findViewById(R.id.start_dialog_activity);startNormal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, NormalActivity.class);startActivity(intent);}});startDialog.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, DialogActivity.class);startActivity(intent);}});}protected void onStart(){super.onStart();Log.d("Main","onStart");}protected void onResume(){super.onResume();Log.d("Main","onResume");}protected void onPause(){super.onPause();;Log.d("Main","onPause");}protected void onStop(){super.onStop();Log.d("Main","onStop");}protected void onDestroy(){super.onDestroy();Log.d("Main","onDestroy");}protected void onRestart(){super.onRestart();Log.d("Main","onRestart");}} 3.運(yùn)行程序 我們發(fā)現(xiàn):
當(dāng)首次運(yùn)行程序時(shí)會(huì)打印
03-19 14:36:27.872 3632-3632/com.example.zy.android2 D/Main: onCreate
03-19 14:36:27.872 3632-3632/com.example.zy.android2 D/Main: onStart
03-19 14:36:27.872 3632-3632/com.example.zy.android2 D/Main: onResume
點(diǎn)擊第一個(gè)按鈕會(huì)打印:
03-19 14:37:20.270 3632-3632/com.example.zy.android2 D/Main: onPause
03-19 14:37:20.733 3632-3632/com.example.zy.android2 D/Main: onStop
說(shuō)明:由于NormalActivity活動(dòng)會(huì)完全遮擋Main活動(dòng),所以這兩個(gè)方法完全執(zhí)行。
返回后打印:
03-19 14:38:11.040 3632-3632/com.example.zy.android2 D/Main: onRestart
03-19 14:38:11.041 3632-3632/com.example.zy.android2 D/Main: onStart
03-19 14:38:11.041 3632-3632/com.example.zy.android2 D/Main: onResume
說(shuō)明:由于之前Main活動(dòng)進(jìn)入停止?fàn)顟B(tài),所以onRestart()方法會(huì)得到執(zhí)行,之后又會(huì)依次調(diào)用onStart()和onResume()。
點(diǎn)擊第二個(gè)按鈕:
03-19 14:39:17.338 3632-3632/com.example.zy.android2 D/Main: onPause
說(shuō)明:沒(méi)有執(zhí)行onStop,是因?yàn)镈ialog沒(méi)有完全遮擋住MainActivity,此時(shí)MainActivity只是進(jìn)入了暫停狀態(tài),并沒(méi)有停止?fàn)顟B(tài)。
返回后打印:
03-19 14:39:21.519 3632-3632/com.example.zy.android2 D/Main: onResume
退出MainActivity
03-19 14:39:49.763 3632-3632/com.example.zy.android2 D/Main: onPause
03-19 14:39:49.772 3632-3632/com.example.zy.android2 D/Main: onStop
03-19 14:39:49.772 3632-3632/com.example.zy.android2 D/Main: onDestroy
活動(dòng)被回收了怎么辦
當(dāng)活動(dòng)A基礎(chǔ)上啟動(dòng)了活動(dòng)B,那么A進(jìn)入停止?fàn)顟B(tài),就有可能被系統(tǒng)回收。如果活動(dòng)A中我們輸入了臨時(shí)數(shù)據(jù),那么當(dāng)從活動(dòng)B返回時(shí),由于重新執(zhí)行了onCreate()方法,數(shù)據(jù)將得不到保存。
Activity提供了一個(gè)onSaveInstanceState()回調(diào)方法,這個(gè)方法可以保證數(shù)據(jù)回收之前一定被調(diào)用,因此我們可以利用這個(gè)方法來(lái)解決互動(dòng)被回收時(shí)臨時(shí)數(shù)據(jù)得不到保存的問(wèn)題。
?
轉(zhuǎn)載于:https://www.cnblogs.com/MrSaver/p/6580655.html
總結(jié)
以上是生活随笔為你收集整理的Android:日常学习笔记(6)——探究活动(3)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CSS基础---日记4
- 下一篇: socket多线程方式案例