首先建立一个管理类 管理堆栈
public class AppManager {
private static Stack activityStack;
private static AppManager instance;
private AppManager(){}
/**
* 单一实例
*/
public static AppManager getAppManager(){
if(instance==null){
instance=new AppManager();
}
return instance;
}
/**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 获取当前Activity(堆栈中最后一个压入的)
*/
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
/**
* 结束所有Activity
*/
public void finishAllActivity(){
for (int i = 0, size = activityStack.size(); i < size; i++){
if (null != activityStack.get(i)){
activityStack.get(i).finish();
}
}
activityStack.clear();
}
}
第二 建立一个BaseActivity 写一些公共方法 等等 在此我们只操作让activity 加入到堆栈并管理
public class BaseActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将Activity实例添加到AppManager的堆栈
AppManager.getAppManager().addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//将Activity实例从AppManager的堆栈中移除
AppManager.getAppManager().finishActivity(this);
}
long firstTime=0;
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){ //KEYCODE_BACK:回退键
long secondTime= System.currentTimeMillis();
if (secondTime-firstTime>2000){
Toast.makeText(AppManager.getAppManager().currentActivity(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
firstTime=System.currentTimeMillis();
return true;
}else{
AppManager.getAppManager().finishAllActivity();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
System.exit(0);
}
}
return super.onKeyUp(keyCode, event);
}
}
然后重写onkeydown 方法 在这个方法中执行退出程序的方法 定义一个时间记录 判断一下点击间隔 然后提示客户是否退出应用等等
AppManager.getAppManager().finishAllActivity(); 这个方法可写可不写 看你需求 你需要记录堆栈记录的话 可以不写 如果你不需要 直接进入到你的mainactivity 就可以加上了
让所有的activity都继承BaseActivity 在此处监听 可以监听所有的activity 任何地方都可以退出程序
当然也可以在你需要的activity里面执行监听 重写onkeydown 方法就可以