看到很多的教程包括官方的api的簡單描述,雙擊返回鍵退出應用程序還用到比較傳統的計時方式,用起來很累,于是我就類了-簡單的類了。
主要業務邏輯就是利用Handler.sendEmptyMessageDelayed()延遲發送消息
Source - Code:
packagecom.samego.alic.demo01uicontrols;
importandroid.app.Activity;
importandroid.app.ActivityManager;
importandroid.content.Context;
importjava.util.LinkedList;
/**
*管理所有的activity類的集合
* Created by alic on 16-3-26.
*/
public class ActivityCollector {
//承載activity的容器
public static LinkedList<Activity> activities=new LinkedList<Activity>();
//定義一個變量,來標識是否退出
public static booleanisExit=false;
/**
*向容器里面添加activity
*@paramactivity
*/
public static void addActivity(Activity activity) {
activities.add(activity);
}
/**
*向容器里面刪除activity
*@paramactivity
*/
public static void removeActivity(Activity activity) {
activities.remove(activity);
}
/**
*遍歷finish所有的activity
*/
public static void finishAll() {
for(Activity activity : activities) {
if(!activity.isFinishing()) {
activity.finish();
}
}
}
/**
*連后臺任務都殺死 殺得一干二凈
*退出應用程序
*完全退出App的方法
*/
public static void AppExit(Context context) {
try{
ActivityCollector.finishAll();
ActivityManager activityMgr = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.killBackgroundProcesses(context.getPackageName());
System.exit(0);
}catch(Exception ignored) {
}
}
}
就上面的code和我們的需求最一個簡單的說明,基本上每一個app打開使用后都有很多的activity界面,
于是上面的類就是用了LinkedList<LinkedList>用來承載每一個activity,然后利用它遍歷kill所有的activity
Using-method:
Step-one:
在onCreate()方法體里面補充
ActivityCollector.addActivity(this);
Stept-two
處理雙擊退出的業務邏輯,這一模塊那就直接看代碼【的注釋】
public booleanonKeyDown(intkeyCode,KeyEvent event) {
//監聽返回鍵點擊處理事件
if(keyCode == KeyEvent.KEYCODE_BACK) {
if(!ActivityCollector.isExit) {
ActivityCollector.isExit=true;
Toast.makeText(getApplicationContext(),"再按一次退出程序",Toast.LENGTH_SHORT).show();
//利用handler延遲發送更改狀態信息? 第一個參數what是信息來源的判斷what
myHandler.sendEmptyMessageDelayed(1,2000);
}else{
ActivityCollector.AppExit(this);
}
return false;
}
return super.onKeyDown(keyCode,event);
}
//該處你懂得優化處理
Handler myHandler=new Handler() {
@Override
public voidhandleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what){
case 0:
ActivityCollector.isExit=false;
break;
}
}
};
已經完事啦,But~But~But~吐槽一下傳統的時間處理的方式吧--看!
private long exitTime=0;
public boolean onKeyDown(int keyCode,KeyEvent event){
if(keyCode==KeyEvent.KEYCODE_BACK){
if((System.currentTimeMillis()-exitTime)>2000){
Toast.makeText(getApplicationContext(),"再按一次退出程序",Toast.LENGTH_SHORT).show();
exitTime=System.currentTimeMillis();
}else{
exit();
}
return false;
}
return super.onKeyDown(keyCode,event);
}
真的完事啦~~