Android 中 退出多个activity的经典方法
程序员文章站
2024-03-05 10:44:18
1.使用list集合方式
用list保存activity实例,然后逐一干掉
import java.util.linkedlist;
import jav...
1.使用list集合方式
用list保存activity实例,然后逐一干掉
import java.util.linkedlist; import java.util.list; import android.app.activity; import android.app.alertdialog; import android.app.application; import android.content.dialoginterface; import android.content.intent; public class sysapplication extends application { private list<activity> mlist = new linkedlist<activity>(); private static sysapplication instance; private sysapplication() { } public synchronized static sysapplication getinstance() { if (null == instance) { instance = new sysapplication(); } return instance; } // add activity public void addactivity(activity activity) { mlist.add(activity); } public void exit() { try { for (activity activity : mlist) { if (activity != null) activity.finish(); } } catch (exception e) { e.printstacktrace(); } finally { // system.exit(0);//去掉这个 } } @override public void onlowmemory() { super.onlowmemory(); system.gc(); } }
在每个activity的oncreate方法中添加类似代码:
public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); sysapplication.getinstance().addactivity(this); }
在需要退出程序的时候,调用:
sysapplication.getinstance().exit();
简而言之,通过单例模式把每个activity 的引用添加到一个全局链表中,每次退出程序调用system.exit(0)时,先调用链表中activity 的finish方法
优点:实现简单,逻辑清晰
2.使用广播
推荐!!好方便!!
基本逻辑就是:定义一个baseactivity,在这个activity中绑定广播,在广播的onreceive方法中调用finish();然后以后的activity都继承这个activity,退出时发送广播,退出baseactivity,父activity都退出了,子activity肯定退出。
代码如下:
import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.content.intentfilter; import android.support.v7.app.appcompatactivity; public class baseactivity extends appcompatactivity { protected broadcastreceiver broadcastreceiver = new broadcastreceiver() { @override public void onreceive(context context, intent intent) { finish(); } }; @override public void onresume() { super.onresume(); // 在当前的activity中注册广播 intentfilter filter = new intentfilter(); filter.addaction("exitapp"); this.registerreceiver(this.broadcastreceiver, filter); } @override protected void ondestroy() { // todo auto-generated method stub super.ondestroy(); //解除绑定 this.unregisterreceiver(this.broadcastreceiver); } }
一个activity实例:
import android.content.intent; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.util.log; import android.view.keyevent; import android.view.view; import android.widget.button; import android.widget.toast; public class activityc extends baseactivity { button btn; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_activity_c); sysapplication.getinstance().addactivity(this); btn = (button) findviewbyid(r.id.acticityc_btn); //关闭所有的activity btn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { } }); } /** * 捕获手机物理菜单键 */ private long exittime = 0; @override public boolean onkeydown(int keycode, keyevent event) { if(keycode == keyevent.keycode_back){//&& event.getaction() == keyevent.action_down if((system.currenttimemillis()-exittime) > 2000){ toast.maketext(getapplicationcontext(), "再按一次退出程序", toast.length_short).show(); exittime = system.currenttimemillis(); } else { myexit(); } return true; } return super.onkeydown(keycode, event); } protected void myexit() { //第二种退出方法 // sysapplication.getinstance().exit(); intent intent = new intent(); intent.setaction("exitapp"); this.sendbroadcast(intent); //super.finish(); } @override protected void onstop() { super.onstop(); log.i("tag","activityc-onstop"); } @override protected void ondestroy() { super.ondestroy(); log.i("tag","activityc-ondestroy"); } }
就是在退出的地方调用这个:
private long exittime = 0; @override public boolean onkeydown(int keycode, keyevent event) { if(keycode == keyevent.keycode_back){//&& event.getaction() == keyevent.action_down if((system.currenttimemillis()-exittime) > 2000){ toast.maketext(getapplicationcontext(), "再按一次退出程序", toast.length_short).show(); exittime = system.currenttimemillis(); } else { myexit(); } return true; } return super.onkeydown(keycode, event); } protected void myexit() { //第二种退出方法 // sysapplication.getinstance().exit(); intent intent = new intent(); intent.setaction("exitapp"); this.sendbroadcast(intent); //super.finish(); }
优点:方便,方便!!只需要在退出的地方发送广播就可以!!
这是我的退出时的输出:
08-09 15:33:48.869 26919-26919/example.com.closeapp i/tag: mainactivity-onpause 08-09 15:33:49.279 26919-26919/example.com.closeapp i/tag: mainactivity-onstop 08-09 15:33:51.569 26919-26959/example.com.closeapp d/openglrenderer: endallstaginganimators on 0x55850598b0 (rippledrawable) with handle 0x5585041510 08-09 15:33:56.079 26919-26919/example.com.closeapp i/tag: mainactivity-ondestroy 08-09 15:33:56.089 26919-26919/example.com.closeapp i/tag: activityb-ondestroy 08-09 15:33:56.399 26919-26919/example.com.closeapp i/tag: activityc-ondestroy
以上所述是小编给大家介绍的android 中 退出多个activity的经典方法,希望对大家有所帮助
上一篇: java中的final关键字详解及实例
推荐阅读
-
Android 中 退出多个activity的经典方法
-
Android使用Theme自定义Activity进入退出动画的方法
-
Android使用Theme自定义Activity进入退出动画的方法
-
Android开发中Activity创建跳转及传值的方法
-
Android实现在子线程中更新Activity中UI的方法
-
android中在Activity中响应ListView内部按钮的点击事件的两种方法
-
详解Android中Intent传递对象给Activity的方法
-
Android开发中Activity创建跳转及传值的方法
-
退出Android程序时清除所有activity的实现方法
-
Android实现在子线程中更新Activity中UI的方法