android 点击两次back 键退出app

来源:互联网 发布:pf软件 编辑:程序博客网 时间:2024/05/21 09:56

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

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 {

@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    //将Activity实例添加到AppManager的堆栈    AppManager.getAppManager().addActivity(this);}@Overrideprotected void onDestroy() {    super.onDestroy();    //将Activity实例从AppManager的堆栈中移除    AppManager.getAppManager().finishActivity(this);}long firstTime=0;@Overridepublic 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 方法就可以

阅读全文
0 0
原创粉丝点击