Android中的Activity啟動(dòng)模式,你了解多少?
模式介紹
Activity的啟動(dòng)模式是指在啟動(dòng)一個(gè)新的Activity時(shí),該Activity如何與任務(wù)棧中的其他Activity進(jìn)行交互的規(guī)則。Android中有四種主要的Activity啟動(dòng)模式,它們分別是:
- standard(標(biāo)準(zhǔn)模式):每次啟動(dòng)一個(gè)Activity時(shí),系統(tǒng)都會(huì)創(chuàng)建一個(gè)新的實(shí)例,并放入任務(wù)棧中。無論這個(gè)Activity是否已經(jīng)存在,都會(huì)創(chuàng)建一個(gè)新的實(shí)例。
- singleTop(單頂部模式):當(dāng)啟動(dòng)的Activity已經(jīng)位于任務(wù)棧的頂部時(shí),不會(huì)創(chuàng)建新的實(shí)例,而是直接使用已經(jīng)存在的實(shí)例。如果不位于頂部,則會(huì)創(chuàng)建新的實(shí)例。
- singleTask(單任務(wù)模式):系統(tǒng)會(huì)檢查任務(wù)棧中是否已經(jīng)存在該Activity的實(shí)例,如果存在,則將該實(shí)例之上的所有Activity移出棧,使得該實(shí)例成為棧頂。如果不存在,則會(huì)創(chuàng)建一個(gè)新的實(shí)例。
- singleInstance(單實(shí)例模式):該模式下的Activity會(huì)單獨(dú)放在一個(gè)新的任務(wù)棧中,且該任務(wù)棧中只有這一個(gè)Activity。其他應(yīng)用無法與其共享任務(wù)棧。
啟動(dòng)模式可以通過在AndroidManifest.xml文件中的標(biāo)簽的android:launchMode屬性來指定。不同的啟動(dòng)模式可以滿足不同的業(yè)務(wù)需求,例如在需要單例模式的場景下可以使用singleInstance啟動(dòng)模式。
設(shè)置方式
「靜態(tài)方式:」
通過在AndroidManifest.xml文件中的標(biāo)簽中設(shè)置android:launchMode屬性來設(shè)置Activity的啟動(dòng)模式。
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
</activity>
「動(dòng)態(tài)方式:」
通過設(shè)置啟動(dòng)的Activity的flag制動(dòng)啟動(dòng)模式
Intent intent = new Intent();
intent.setClass(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
使用場景
- 「standard」:
場景:一般的應(yīng)用程序界面跳轉(zhuǎn)
示例:從一個(gè)Activity跳轉(zhuǎn)到另一個(gè)Activity,每次都創(chuàng)建新的實(shí)例
- 「singleTop」:
場景:需要頻繁跳轉(zhuǎn)到同一個(gè)Activity,并且不希望重復(fù)創(chuàng)建實(shí)例
示例:從Activity A跳轉(zhuǎn)到Activity B,如果Activity B已經(jīng)位于棧頂,則不創(chuàng)建新實(shí)例,直接使用已存在的實(shí)例
「singleTask」:
場景:需要確保整個(gè)應(yīng)用中只有一個(gè)該Activity的實(shí)例
示例:應(yīng)用的主界面,或者一個(gè)需要獨(dú)立任務(wù)棧的特殊界面
「singleInstance」:
場景:需要將該Activity放置在一個(gè)新的任務(wù)棧中,并且確保整個(gè)系統(tǒng)中只有一個(gè)該Activity的實(shí)例
示例:一個(gè)需要獨(dú)立任務(wù)棧的特殊界面,比如來電界面或者鬧鐘提醒界面
這些啟動(dòng)模式可以根據(jù)應(yīng)用的需求來靈活選擇,以達(dá)到最佳的用戶體驗(yàn)和應(yīng)用性能。