Android的四大組件Activity,Service,Broadcast,Content Provider想必大家都不陌生了,今天在這里給大家詳解一下Activity的相關(guān)知識(shí)點(diǎn)。
應(yīng)用的主活動(dòng)
在AndroidMainfest清單文件中,我們可以將一個(gè)活動(dòng)設(shè)置為應(yīng)用啟動(dòng)的默認(rèn)主活動(dòng),也就是進(jìn)入這個(gè)應(yīng)用的入口??稍赼pplication標(biāo)簽中,將你需要設(shè)置的activity的對(duì)應(yīng)標(biāo)簽中的intent-filter元素聲明中將action設(shè)置為如下代碼.
<action android:name="android.intent.action.MAIN">
四種啟動(dòng)方式
在AndroidMainfest清單文件里我們可以在activity標(biāo)簽內(nèi)設(shè)置android:launchMode來(lái)進(jìn)行啟動(dòng)方式的設(shè)置,四種啟動(dòng)方式分別如下:
標(biāo)準(zhǔn)模式(standard)
standard是系統(tǒng)默認(rèn)的啟動(dòng)方式,以這種方式啟動(dòng)的activity會(huì)在任務(wù)棧中直接創(chuàng)建一個(gè)新的實(shí)例,不管之前在任務(wù)棧中有沒(méi)有重新創(chuàng)建.
棧頂復(fù)用模式(singleTop)
singleTop正如其名,當(dāng)新啟動(dòng)的activity已經(jīng)存在于任務(wù)棧棧頂,那么就不會(huì)再創(chuàng)建新的實(shí)例,而是直接調(diào)用onNewIntent()方法,如果不存在于任務(wù)棧棧頂,那么就重新創(chuàng)建一個(gè)實(shí)例加入任務(wù)棧中。
棧內(nèi)復(fù)用模式(singleTask)
singleTask正如其名,當(dāng)新啟動(dòng)的activity已經(jīng)存在于任務(wù)棧中,那么就不會(huì)再創(chuàng)建新的實(shí)例,而是直接調(diào)用onNewIntent()方法,并且關(guān)閉這個(gè)activity之上的任務(wù)棧中的activity,舉例如果按順序打開了A-B-C三個(gè)頁(yè)面,那么以此種方式啟動(dòng)B,就會(huì)將C出棧,并且調(diào)用B的onNewIntent()方法,如果不存在于任務(wù)棧中,那么就重新創(chuàng)建一個(gè)實(shí)例加入任務(wù)棧中.(ps:之前筆者開發(fā)過(guò)程中就因?yàn)橹黜?yè)的啟動(dòng)方式是singleTask,導(dǎo)致了某一個(gè)bug把主頁(yè)給出棧了,因此啟動(dòng)方式的了解是非常重要的 !!!)
單例模式(singleInstance)
這種啟動(dòng)方式比較特別,以這種方式啟動(dòng)的activity會(huì)單獨(dú)運(yùn)行于一個(gè)任務(wù)棧中,這個(gè)任務(wù)棧只會(huì)存在它一個(gè)實(shí)例。
打開一個(gè)Activity
打開activity采用Intent的方式,可以通過(guò)給Intent設(shè)置Bundle對(duì)象來(lái)傳遞你想要傳遞給下一個(gè)界面的值,但在日常開發(fā)中activty可能會(huì)復(fù)用,這樣傳值會(huì)導(dǎo)致前后打開的頁(yè)面耦合度太高,容易造成空指針的問(wèn)題,因此不建議采用Bundle的方式向下一個(gè)頁(yè)面,最好采用其他方式,例如以將一些公共數(shù)據(jù)利用SharedPreference存儲(chǔ)。代碼如下:
Intent intent= new Intent(ActivityA.this,ActivityB.class);//通過(guò)Intent的Flag設(shè)置
intent.addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
生命周期
一個(gè)完整的Activity的生命周期包含了以下方法。
onCreate()
onStart()
onResume()
onPause()
onStop()
onRestart()
onDestroy()
兩個(gè)Activity切換時(shí)的生命周期變化
A切換到B
A:onCreate() -- onStart() -- onResume() -- onPause()
B:onCreate -- onStart() -- onResume()
A:onStop() -- onStop() 方法只會(huì)在A不可見(jiàn)時(shí)調(diào)用,如果透明可見(jiàn)則不調(diào)用
B返回到A(按下返回鍵)
B:onPause()
A:onRestart() -- onStart() -- onResume()
B:onStop() -- onDestroy()
Activity的知識(shí)點(diǎn)就暫時(shí)總結(jié)到這個(gè)地方啦。