android 点击两次back 键退出app

首先建立一个管理类 管理堆栈

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 方法就可以

猜你喜欢

转载自blog.csdn.net/naide_s/article/details/78751013