Android 關(guān)閉多個(gè)Activity的實(shí)現(xiàn)方法
Android 關(guān)閉多個(gè)Activity的實(shí)現(xiàn)方法
總的來說有四種方法:
1、使用Application來進(jìn)行關(guān)閉
public class App extends Application { private static List<Activity> lists = 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)注冊(cè)廣播,onDestroy方法取消注冊(cè)
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方法通過識(shí)別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是相同的,每次都會(huì)創(chuàng)建一個(gè)新的Activity實(shí)例,區(qū)別是singleTop當(dāng)壓入棧的Activity與任務(wù)棧的棧頂Activit相同則不會(huì)創(chuàng)建實(shí)例(會(huì)調(diào)用onNewIntent方法)
2)singleInstance和singleTask是相同的,都會(huì)保證任務(wù)中沒有相同的任務(wù),(當(dāng)執(zhí)行的Activity與任務(wù)中某個(gè)Activity相同則會(huì)調(diào)用onNewIntent方法),不同點(diǎn)是(singleInstance每次都會(huì)創(chuàng)建一個(gè)任務(wù)棧并將Activity壓入棧中),(singleTask是在一個(gè)任務(wù)棧中,如果壓入棧的Activity與棧內(nèi)Activity某個(gè)相同則直接將那個(gè)Activity移動(dòng)到棧頂不會(huì)創(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è)活動(dòng)開始之前清除該棧中所有的任務(wù),將里面的Activity都finish掉 FLAG_ACTIVITY_TASK_ON_HOME 這個(gè)flag將造成新任務(wù)在home的上面,就是在啟動(dòng)的Activity點(diǎn)擊back之后就會(huì)回到home界面 */
如有疑問請(qǐng)留言或到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Android開發(fā)之5.0activity跳轉(zhuǎn)時(shí)共享元素的使用方法
- android開發(fā)之關(guān)閉所有的activity的方法
- Android開發(fā)使用Activity嵌套多個(gè)Fragment實(shí)現(xiàn)橫豎屏切換功能的方法
- Android使用Activity實(shí)現(xiàn)簡(jiǎn)單的可輸入對(duì)話框
- Android5.0之Activity的轉(zhuǎn)場(chǎng)動(dòng)畫的示例
- Android 中 ActivityLifecycleCallbacks的實(shí)例詳解
- Android中Activity和Fragment傳遞數(shù)據(jù)的兩種方式
- Android判斷當(dāng)前棧頂Activity的包名代碼示例
相關(guān)文章
Android 加載大圖及多圖避免程序出現(xiàn)OOM(OutOfMemory)異常
這篇文章主要介紹了Android 加載大圖及多圖避免程序出現(xiàn)OOM(OutOfMemory)異常的相關(guān)資料,需要的朋友可以參考下2017-03-03Android實(shí)現(xiàn)拍照及圖片裁剪(6.0以上權(quán)限處理及7.0以上文件管理)
本篇文章主要介紹了Android實(shí)現(xiàn)拍照及圖片裁剪(6.0以上權(quán)限處理及7.0以上文件管理),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-10-10Android6.0 Launcher2應(yīng)用解析
這篇文章主要為大家詳細(xì)介紹了Android6.0 Launcher2應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09簡(jiǎn)單說說Android中如何使用攝像頭和相冊(cè)
本篇文章主要介紹了簡(jiǎn)單說說Android中如何使用攝像頭和相冊(cè),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05使用Android自定義控件實(shí)現(xiàn)滑動(dòng)解鎖九宮格
最近由于Android項(xiàng)目需要,要求做一個(gè)類似于支付寶的九宮格解鎖組件,下面小編給大家分享了具體實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-10-10Android實(shí)現(xiàn)計(jì)時(shí)與倒計(jì)時(shí)的常用方法小結(jié)
這篇文章主要介紹了Android實(shí)現(xiàn)計(jì)時(shí)與倒計(jì)時(shí)的常用方法,總結(jié)并對(duì)比分析了幾種常用計(jì)時(shí)方法的特點(diǎn),具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10android studio 新手入門教程(二)項(xiàng)目的導(dǎo)入教程圖解
這篇文章主要介紹了android studio 新手入門教程(二)項(xiàng)目的導(dǎo)入教程圖解,需要的朋友可以參考下2017-12-12Android 多圖上傳后將圖片進(jìn)行九宮格展示的實(shí)例代碼
這篇文章主要介紹了Android 多圖上傳后將圖片進(jìn)行九宮格展示,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11