Android关闭多个Activity的实现方法

Android关闭多个Activity的实现⽅法Android 关闭多个Activity的实现⽅法
总的来说有四种⽅法:
1、使⽤Application来进⾏关闭
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,在构造构造⽅法调⽤App.addActivity(this);就可以实现。segg
2、使⽤⼴播的⽅式来进⾏关闭
在基类构造⽅法中实现注册⼴播,onDestroy⽅法取消注册
public class BaseActivity extends AppCompatActivity {
@Override
ccc360protected void onCreate(Bundle savedInstanceState) {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(getString(R.string.promotion_action));
registerReceiver(receiver, intentFilter);
}
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
dtt使用浓度
public void onReceive(Context context, Intent intent) {
finish();
}
};
@Override
protected void onDestroy() {
unregisterReceiver(receiver);
}
}
接下来只需要你在想要关闭所有Activity的界⾯调⽤
//销毁所有的Activity
//关闭本窗⼝
getActivity().finish();
/
/关闭⽗窗⼝
if(getActivity().getParent()!= null){
getActivity().getParent().finish();
}
石英毛细管//关闭列表页⾯
Intent intent = new Intent();
intent.setAction(getString(R.string.promotion_action));
getActivity().sendBroadcast(intent);
3、使⽤onActivityResult递归回调的⽅式关闭
1)在基类Activity重写onActivityResult⽅法通过识别ResultCode来调⽤finish⽅法
2)接下来只需要在你想要关闭Activity调⽤setResult(Result_CLOSE)就可以了
public class BaseActivity extends AppCompatActivity {
protected final static int RESULT_CLOSE = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_CLOSE){
setResult(RESULT_CLOSE);
finish();
}
}
}
4.使⽤setFalgs的⽅式来关闭
⾸先先来介绍⼀个LaunchMode四种模式:
LaunchMode
1)standard和singleTop是相同的,每次都会创建⼀个新的Activity实例,区别是singleTop当压⼊栈的Activity与任务栈的栈顶Activit相同则不会创建实例(会调⽤onNewIntent⽅法)
蛇油精2)singleInstance和singleTask是相同的,都会保证任务中没有相同的任务,(当执⾏的Activity与任务中某个Activity相同则会调⽤onNewIntent⽅法),不同点是(singleInstance每次都会创建⼀个任务栈并将Activity压⼊栈中),(singleTask是在⼀个任务栈中,如果压⼊栈的Activity与栈内Activity某个相同则直接将那个Activity移动到栈顶不会创建新的实例)
当然这⾥并没有⽤到这四种模式⽽是运⽤的是Intent.FLAG_ACTIVITY_CLEAR_TOP,这种标⽰基本和singleTop类似不同的是如果压⼊栈的Activity在栈内某个Activity相同则将它上⾯的所有Activity进⾏出栈操作。
在每次跳转都加上
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
所以在最后⼀个Activity后退应⽤:
@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);
}
KeyDown(keyCode, event);
}
这样略先复杂,现在来说⼀下使⽤flag的另⼀种⽅法:
在退出的Activity的前⼀个Activity跳转加上
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
就可以了,现在来说⼀下这⼏个什么意思
/*密封性测试方法
FLAG_ACTIVITY_CLEAR_TASK 这个标⽰将在这个活动开始之前清除该栈中所有的任务,将⾥⾯的Activity都finish掉
FLAG_ACTIVITY_TASK_ON_HOME 这个flag将造成新任务在home的上⾯,就是在启动的Activity点击back之后就会回到home界⾯
*/
如有疑问请留⾔或到本站社区交流讨论,感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!

本文发布于:2024-09-23 06:21:45,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/277479.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:关闭   构造   任务   创建   不会   阅读
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议