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);就可以实现。
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界面 */
如有疑问请留言或到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
推荐阅读
-
Android编程实现手绘及保存为图片的方法(附demo源码下载)
-
Android编程使用GestureDetector实现简单手势监听与处理的方法
-
Android编程中activity启动时出现白屏、黑屏问题的解决方法
-
Android编程实现文字倒影效果的方法
-
Android编程实现Gallery中每次滑动只显示一页的方法
-
Android编程实现仿iphone抖动效果的方法(附源码)
-
Android编程实现WebView全屏播放的方法(附源码)
-
android编程实现设置、打开wifi热点共享供他人连接的方法
-
Android编程使用自定义shape实现shadow阴影效果的方法
-
Android listview定位到上次显示的位置的实现方法