简单快捷的退出APP应用

看到很多的教程包括官方的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 activities=new 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用来承载每一个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);

}

真的完事啦~~




你可能感兴趣的:(简单快捷的退出APP应用)