Android 关闭多个Activity的实现方法
作者:CharlinGod 发布时间:2022-02-24 21:21:19
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);就可以实现。
2、使用广播的方式来进行关闭
在基类构造方法中实现注册广播,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);
}
}
接下来只需要你在想要关闭所有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) {
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的方式来关闭
首先先来介绍一个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);
}
return super.onKeyDown(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界面
*/
如有疑问请留言或到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/lovoo/article/details/78026027


猜你喜欢
- 本文实例为大家分享了c语言实现可自定义的游戏地图的具体代码,供大家参考,具体内容如下博主相信每个人都有想做游戏的冲动,那么本文将给出一个用c
- 一、前言装饰模式实际上是一直提倡的组合代替继承的实践方式,个人认为要理解装饰者模式首先需要理解为什么需要组合代替继承,继承又是为什么让人深恶
- 一、介绍pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair。当然你也可以自定义一个结构体struct。不过大家都是为了
- 本文以实例形式简单讲述了引用类型转换的几种常见方式,如:子类转换成父类,父类转换成子类,以及不是子父级关系类之间的转换。现分述如下,供大家参
- 本文实例为大家分享了android实现点击图片全屏展示的具体代码,供大家参考,具体内容如下MainActivity:public class
- cc3利用链如下:TrAXFilter(Templates templates) TemplatesImpl-&a
- 一、使用 System.Xml.Serialization类1、定义元数据引入System.Xml.Serialization命名空间。XM
- 1.由json字符串转换成Map对象如json字符串:{"contend":[{"bid":&quo
- 本文主要讲解利用android中Matrix控制图形的旋转缩放移动,具体参见一下代码:/** * 使用矩阵控制图片移动、缩放、旋
- 在实际的工作中直接使用反射的机会比较少,有印象的就是一次自己做的WinForms小工具的时候利用反射来动态获取窗体上的每个控件,并且为必要的
- 一、问题分析入门案例的内容已经做完了,在入门案例中我们创建过一个SpringMvcConfig的配置类,再回想前面咱们学习Spring的时候
- Spring Boot读取yml文件的主要方式有以下几种:1.@Value注解? 我们可以在bean的属性上使用@Value注解,直接读取y
- 现在基于SpringCloud的微服务开发日益流行,网上各种开源项目层出不穷。我们在实际工作中可以参考开源项目实现很多开箱即用的功能,但是必
- 很多C#的初学者在编程时都容易把抽象类和接口搞混,本文就为大家从概念上讲解抽象类和接口的区别:一、抽象类:含有abstract修饰符的cla
- 接收参数的方式:1.HttpServletRequest方式接收public ModelAndView test1(HttpServletR
- 1. 讲故事最近因为各方面原因换了一份工作,去了一家主营物联柜的公司,有意思的是物联柜上的终端是用 wpf 写的,代码也算是年久失修,感觉技
- 实现GridView的横向滚动效果如下图:具体实现的代码•1. 主界面布局代码:activity_main.xml<?xml vers
- 简介Spring Security是一个基于Spring框架的安全认证和授权框架,它提供了一套全面的安全解决方案,可以在Web应用、移动应用
- 安装Jenkins提示:首先Jenkins安装方式有2中,一种是yum安装,另一种是使用war的方式进行安装(war就需要安装tomcat)
- 前言需求要点如下:弹幕行数为3行,每条弹幕相互依靠但不存在重叠每条弹幕可交互点击跳转滚动速度恒定 触摸不可暂停播放弹幕数据固定一百条且支持轮