android 退出多个activity,Android 中 退出多个activity的经典方法
1.使用list集合方式
用list保存activity實(shí)例,然后逐一干掉
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 mlist = new linkedlist();
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);//去掉這個(gè)
}
}
@override
public void onlowmemory() {
super.onlowmemory();
system.gc();
}
}
在每個(gè)activity的oncreate方法中添加類似代碼:
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
sysapplication.getinstance().addactivity(this);
}
在需要退出程序的時(shí)候,調(diào)用:
sysapplication.getinstance().exit();
簡(jiǎn)而言之,通過單例模式把每個(gè)activity 的引用添加到一個(gè)全局鏈表中,每次退出程序調(diào)用system.exit(0)時(shí),先調(diào)用鏈表中activity 的finish方法
優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,邏輯清晰
2.使用廣播
推薦!!好方便!!
基本邏輯就是:定義一個(gè)baseactivity,在這個(gè)activity中綁定廣播,在廣播的onreceive方法中調(diào)用finish();然后以后的activity都繼承這個(gè)activity,退出時(shí)發(fā)送廣播,退出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();
// 在當(dāng)前的activity中注冊(cè)廣播
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);
}
}
一個(gè)activity實(shí)例:
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);
//關(guān)閉所有的activity
btn.setonclicklistener(new view.onclicklistener() {
@override
public void onclick(view view) {
}
});
}
/**
* 捕獲手機(jī)物理菜單鍵
*/
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");
}
}
就是在退出的地方調(diào)用這個(gè):
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();
}
優(yōu)點(diǎn):方便,方便!!只需要在退出的地方發(fā)送廣播就可以!!
這是我的退出時(shí)的輸出:
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 中 退出多個(gè)activity的經(jīng)典方法,希望對(duì)大家有所幫助
總結(jié)
以上是生活随笔為你收集整理的android 退出多个activity,Android 中 退出多个activity的经典方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos攻击在线购买(ddos攻击 淘宝
- 下一篇: android数据流分类,【Androi