Android 關(guān)閉多個Activity的實現(xiàn)方法
Android 關(guān)閉多個Activity的實現(xiàn)方法
總的來說有四種方法:
1、使用Application來進行關(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();
}
}
}
//然后寫一個基類Activity,在構(gòu)造構(gòu)造方法調(diào)用App.addActivity(this);就可以實現(xiàn)。
2、使用廣播的方式來進行關(guān)閉
在基類構(gòu)造方法中實現(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)閉
首先先來介紹一個LaunchMode四種模式:
LaunchMode
1)standard和singleTop是相同的,每次都會創(chuàng)建一個新的Activity實例,區(qū)別是singleTop當(dāng)壓入棧的Activity與任務(wù)棧的棧頂Activit相同則不會創(chuàng)建實例(會調(diào)用onNewIntent方法)
2)singleInstance和singleTask是相同的,都會保證任務(wù)中沒有相同的任務(wù),(當(dāng)執(zhí)行的Activity與任務(wù)中某個Activity相同則會調(diào)用onNewIntent方法),不同點是(singleInstance每次都會創(chuàng)建一個任務(wù)棧并將Activity壓入棧中),(singleTask是在一個任務(wù)棧中,如果壓入棧的Activity與棧內(nèi)Activity某個相同則直接將那個Activity移動到棧頂不會創(chuàng)建新的實例)
當(dāng)然這里并沒有用到這四種模式而是運用的是Intent.FLAG_ACTIVITY_CLEAR_TOP,這種標(biāo)示基本和singleTop類似不同的是如果壓入棧的Activity在棧內(nèi)某個Activity相同則將它上面的所有Activity進行出棧操作。
在每次跳轉(zhuǎn)都加上
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
所以在最后一個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的前一個Activity跳轉(zhuǎn)加上
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
就可以了,現(xiàn)在來說一下這幾個什么意思
/* FLAG_ACTIVITY_CLEAR_TASK 這個標(biāo)示將在這個活動開始之前清除該棧中所有的任務(wù),將里面的Activity都finish掉 FLAG_ACTIVITY_TASK_ON_HOME 這個flag將造成新任務(wù)在home的上面,就是在啟動的Activity點擊back之后就會回到home界面 */
如有疑問請留言或到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- Android開發(fā)之5.0activity跳轉(zhuǎn)時共享元素的使用方法
- android開發(fā)之關(guān)閉所有的activity的方法
- Android開發(fā)使用Activity嵌套多個Fragment實現(xiàn)橫豎屏切換功能的方法
- Android使用Activity實現(xiàn)簡單的可輸入對話框
- Android5.0之Activity的轉(zhuǎn)場動畫的示例
- Android 中 ActivityLifecycleCallbacks的實例詳解
- 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-03
Android實現(xiàn)拍照及圖片裁剪(6.0以上權(quán)限處理及7.0以上文件管理)
本篇文章主要介紹了Android實現(xiàn)拍照及圖片裁剪(6.0以上權(quán)限處理及7.0以上文件管理),非常具有實用價值,需要的朋友可以參考下2017-10-10
Android6.0 Launcher2應(yīng)用解析
這篇文章主要為大家詳細介紹了Android6.0 Launcher2應(yīng)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09
Android實現(xiàn)計時與倒計時的常用方法小結(jié)
這篇文章主要介紹了Android實現(xiàn)計時與倒計時的常用方法,總結(jié)并對比分析了幾種常用計時方法的特點,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10
android studio 新手入門教程(二)項目的導(dǎo)入教程圖解
這篇文章主要介紹了android studio 新手入門教程(二)項目的導(dǎo)入教程圖解,需要的朋友可以參考下2017-12-12

