Android以棧的形式管理activity。
活動(dòng)狀態(tài)
1.運(yùn)行狀態(tài):棧頂?shù)腶ctivity
2.暫停狀態(tài):不是處于棧頂撞叽,但是仍然可見(jiàn)
3.停止?fàn)顟B(tài):不處于棧頂狂巢,并完全不可見(jiàn).在其他地方需要內(nèi)存時(shí)阎曹,可能會(huì)被系統(tǒng)回收
4.銷毀狀態(tài):從棧中移除昙衅,被系統(tǒng)回收,為手機(jī)提供更多內(nèi)存
生存期
onCreate()鹉胖。activity第一次被創(chuàng)建時(shí)調(diào)用
onStart()握玛。activity由不可見(jiàn)變?yōu)榭梢?jiàn)時(shí)調(diào)用
onResume()。activity準(zhǔn)備和用戶交互時(shí)調(diào)用activity(運(yùn)行狀態(tài))在棧頂
onPause()甫菠。android啟動(dòng)另一個(gè)activity時(shí)調(diào)用(執(zhí)行速度要快挠铲,否則影響新的棧頂activity使用)
onStop()。activity完全不可見(jiàn)時(shí)調(diào)用寂诱。
onDestroy()拂苹。activity銷毀前調(diào)用。
onRestart()痰洒。activity由停止?fàn)顟B(tài)變?yōu)檫\(yùn)行狀態(tài)前調(diào)用
活動(dòng)被回收數(shù)據(jù)保存
onSaveInstanceState()瓢棒。回調(diào)方法丘喻,activity回收前調(diào)用脯宿。用于保存臨時(shí)數(shù)據(jù)
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
String testString= "test";
outState.putString("test_String",testString);
}
獲取臨時(shí)數(shù)據(jù)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
String testString = savedInstanceState.getString("test_string");
Log.v("FirstActivityTestString",testString);
}
}
activity啟動(dòng)模式
standard : android默認(rèn)啟動(dòng)模式,棧管理泉粉,每次都會(huì)創(chuàng)建新的實(shí)例
singleTop : 如果activity在棧頂连霉,則不創(chuàng)建新的實(shí)例,并直接使用
singleTask : 如果棧里面有這個(gè)activity就不創(chuàng)建新的實(shí)例
singleInstance : 創(chuàng)建一個(gè)新的棧榴芳,并且將activity加入到這個(gè)新的棧里面
//栗子例子
<activity android:name=".FirstActivity"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>