看到很多的教程包括官方的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
//定义一个变量,来标识是否退出
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
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);
}
真的完事啦~~