Android中怎么關(guān)閉多個(gè)Activity,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)建站長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為臨澧企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè),臨澧網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
1、使用Application來進(jìn)行關(guān)閉
public class App extends Application { private static Listlists = new ArrayList<>(); public static void addActivity(Activity activity) { lists.add(activity); } public static void clearActivity() { if (lists != null) { for (Activity activity : lists) { activity.finish(); } lists.clear(); } } } //然后寫一個(gè)基類Activity,在構(gòu)造構(gòu)造方法調(diào)用App.addActivity(this);就可以實(shí)現(xiàn)。
2、使用廣播的方式來進(jìn)行關(guān)閉
在基類構(gòu)造方法中實(shí)現(xiàn)注冊廣播,onDestroy方法取消注冊
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(getString(R.string.promotion_action)); registerReceiver(receiver, intentFilter); } BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { finish(); } }; @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(receiver); } }
接下來只需要你在想要關(guān)閉所有Activity的界面調(diào)用
//銷毀所有的Activity //關(guān)閉本窗口 getActivity().finish(); //關(guān)閉父窗口 if(getActivity().getParent()!= null){ getActivity().getParent().finish(); } //關(guān)閉列表頁面 Intent intent = new Intent(); intent.setAction(getString(R.string.promotion_action)); getActivity().sendBroadcast(intent);
3、使用onActivityResult遞歸回調(diào)的方式關(guān)閉
1)在基類Activity重寫onActivityResult方法通過識別ResultCode來調(diào)用finish方法
2)接下來只需要在你想要關(guān)閉Activity調(diào)用setResult(Result_CLOSE)就可以了
public class BaseActivity extends AppCompatActivity { protected final static int RESULT_CLOSE = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_CLOSE){ setResult(RESULT_CLOSE); finish(); } } }
4.使用setFalgs的方式來關(guān)閉
首先先來介紹一個(gè)LaunchMode四種模式:
LaunchMode
1)standard和singleTop是相同的,每次都會創(chuàng)建一個(gè)新的Activity實(shí)例,區(qū)別是singleTop當(dāng)壓入棧的Activity與任務(wù)棧的棧頂Activit相同則不會創(chuàng)建實(shí)例(會調(diào)用onNewIntent方法)
2)singleInstance和singleTask是相同的,都會保證任務(wù)中沒有相同的任務(wù),(當(dāng)執(zhí)行的Activity與任務(wù)中某個(gè)Activity相同則會調(diào)用onNewIntent方法),不同點(diǎn)是(singleInstance每次都會創(chuàng)建一個(gè)任務(wù)棧并將Activity壓入棧中),(singleTask是在一個(gè)任務(wù)棧中,如果壓入棧的Activity與棧內(nèi)Activity某個(gè)相同則直接將那個(gè)Activity移動到棧頂不會創(chuàng)建新的實(shí)例)
當(dāng)然這里并沒有用到這四種模式而是運(yùn)用的是Intent.FLAG_ACTIVITY_CLEAR_TOP,這種標(biāo)示基本和singleTop類似不同的是如果壓入棧的Activity在棧內(nèi)某個(gè)Activity相同則將它上面的所有Activity進(jìn)行出棧操作。
在每次跳轉(zhuǎn)都加上
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
所以在最后一個(gè)Activity后退應(yīng)用:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { //銷毀所有的Activity Intent intent = new Intent(this,FirstActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } return super.onKeyDown(keyCode, event); }
這樣略先復(fù)雜,現(xiàn)在來說一下使用flag的另一種方法:
在退出的Activity的前一個(gè)Activity跳轉(zhuǎn)加上
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
就可以了,現(xiàn)在來說一下這幾個(gè)什么意思
/* FLAG_ACTIVITY_CLEAR_TASK 這個(gè)標(biāo)示將在這個(gè)活動開始之前清除該棧中所有的任務(wù),將里面的Activity都finish掉 FLAG_ACTIVITY_TASK_ON_HOME 這個(gè)flag將造成新任務(wù)在home的上面,就是在啟動的Activity點(diǎn)擊back之后就會回到home界面 */
關(guān)于Android中怎么關(guān)閉多個(gè)Activity問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。