zoukankan      html  css  js  c++  java
  • Android -- 双击退出

    实现android双击后退键退出当前APP功能

    实现该功能基本思路是,

    1, 监听后退键 , 比较两次后退间隔 , 低于两秒则出发退出

    2, 退出当前APP 

    我选择在基类中BaseActivity 中设置监听,代码如下:

    @Override
        public void onBackPressed() {
    
            //Preferences 中获取是否双击退出
            boolean isDoubleClick = true;
            //BaseApplication.get("ifDoubleClickedBack", true);
    
            if (isDoubleClick) {
                long curTime = SystemClock.uptimeMillis();
                if ((curTime - mBackPressedTime) < (2 * 1000)) {
                    finish();
                    //activity栈管理
                    AppManager.getAppManager().AppExit();
                } else {
                    mBackPressedTime = curTime;
                    Toast.makeText(this, "再次点击退出", Toast.LENGTH_SHORT).show();
                }
            } else {
                finish();
            }
    
        }

    在退出当前APP中,参考开源中国,封装了activity栈

    public class AppManager {
        private static Stack<Activity> activityStack;
        private static AppManager instance;
    
        private AppManager() {
        }
    
        /**
         * 单一实例
         */
        public static AppManager getAppManager() {
            if (instance == null) {
                instance = new AppManager();
            }
    
            if (activityStack == null) {
                activityStack = new Stack<Activity>();
            }
    
            return instance;
        }
    
        /**
         * 获取指定的Activity
         *
         * @author kymjs
         */
        public static Activity getActivity(Class<?> cls) {
            if (activityStack != null)
                for (Activity activity : activityStack) {
                    if (activity.getClass().equals(cls)) {
                        return activity;
                    }
                }
            return null;
        }
    
        /**
         * 添加Activity到堆栈
         */
        public void addActivity(Activity activity) {
            activityStack.add(activity);
        }
    
        /**
         * 获取当前Activity(堆栈中最后一个压入的)
         */
        public Activity currentActivity() {
            Activity activity = activityStack.lastElement();
            return activity;
        }
    
        /**
         * 结束当前Activity(堆栈中最后一个压入的)
         */
        public void finishActivity() {
            Activity activity = activityStack.lastElement();
            finishActivity(activity);
        }
    
        /**
         * 结束指定的Activity
         */
        public void finishActivity(Activity activity) {
            if (activity != null && activityStack.contains(activity)) {
                activityStack.remove(activity);
                activity.finish();
            }
        }
    
        /**
         * 结束指定的Activity
         */
        public void removeActivity(Activity activity) {
            if (activity != null && activityStack.contains(activity)) {
                activityStack.remove(activity);
            }
        }
    
        /**
         * 结束指定类名的Activity
         */
        public void finishActivity(Class<?> cls) {
            for (Activity activity : activityStack) {
                if (activity.getClass().equals(cls)) {
                    finishActivity(activity);
                    break;
                }
            }
        }
    
        /**
         * 结束所有Activity
         */
        public void finishAllActivity() {
            for (int i = 0, size = activityStack.size(); i < size; i++) {
                if (null != activityStack.get(i)) {
                    finishActivity(activityStack.get(i));
                }
            }
            activityStack.clear();
        }
    
        /**
         * 退出应用程序
         */
        public void AppExit() {
            try {
                finishAllActivity();
                // System.exit(0);
            } catch (Exception e) {
            }
        }
    }
    View Code

    思路就是在每次activity 压入activity栈中管理

    在退出时遍历栈,挨个finish

  • 相关阅读:
    20155322 2016-2017-2 《Java程序设计》第7周学习总结
    高级sed编程
    正则表达式
    实验十二:kvm环境下qemu-kvm创建虚拟机之间的网络配置
    实验十一:了解qemu-kvm的显示选项参数
    实验十:在kvm下创建winxp虚拟机
    实验九:第二个虚拟机的创建(标准选项)
    实验八:kvm环境搭建并创建第一台cirrOS虚拟机
    sed和gawk
    在脚本中添加颜色
  • 原文地址:https://www.cnblogs.com/ben1992/p/5703870.html
Copyright © 2011-2022 走看看