日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 退出多个activity,Android 中 退出多个activity的经典方法

發(fā)布時(shí)間:2023/12/2 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 退出多个activity,Android 中 退出多个activity的经典方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。