2022-11-30 16:59:55
浏览数 (2)
要实现的效果如图:
代码很简单,复写onKeyDown方法,监听到back键的点击就初始化一个时间变量,并给出一个toast。当接下来一定时间内(我这里取的是1.5秒)再次有点击事件时,退出应用。
代码语言:javascript
复制@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
long secondClickBack = System.currentTimeMillis();
if(secondClickBack - firstClickBack >1500){
Toast.makeText(this, "再按一次退出每一天", 0).show();
firstClickBack = secondClickBack;
return true;
}else{
MyApplication.getInstance().exitApp();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
注意上述代码中有个MyApplication.getInstance().exitApp();
执行这个的前提是实现自定义个MyApplication,代码在后面。
我们在每个Activity的onCreate()方法中调用MyApplication.addActivity方法将当前activity保存进去。等要退出应用时调用MyApplication.exitApp方法将所有activity都finish();
MyApplication代码如下:
代码语言:javascript
复制package com.zsx.base;
import java.util.ArrayList;
import android.app.Activity;
import android.app.Application;
public class MyApplication extends Application {
public static ArrayList<Activity> list;
private static MyApplication myApp = null;
//要保证每个Activity中使用的MyApplication都是同一个,就用到了单例模式
//单例模式:只有一个对象,也就是上面的那个myApp只实例化一次
//由于MyApplication继承自Application,复写的构造函数访问权限不能低于父类的,所以不能为private
//所以我们在这里实现一个伪单例模式
public static MyApplication getInstance(){
if(myApp == null ){
myApp = new MyApplication();
list = new ArrayList<Activity>();
}
return myApp;
}
/**
* 添加activity到数组中
* @param activity
*/
public void addActivity(Activity activity){
list.add(activity);
}
/**
* 退出应用,结束所有activity
*/
public void exitApp(){
for (Activity activity : list) {
activity.finish();
}
}
}