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

  • 相关阅读:
    再次或多次格式化导致namenode的ClusterID和datanode的ClusterID之间不一致的问题解决办法
    Linux安装aria2
    POJ 3335 Rotating Scoreboard 半平面交
    hdu 1540 Tunnel Warfare 线段树 区间合并
    hdu 3397 Sequence operation 线段树 区间更新 区间合并
    hud 3308 LCIS 线段树 区间合并
    POJ 3667 Hotel 线段树 区间合并
    POJ 2528 Mayor's posters 贴海报 线段树 区间更新
    POJ 2299 Ultra-QuickSort 求逆序数 线段树或树状数组 离散化
    POJ 3468 A Simple Problem with Integers 线段树成段更新
  • 原文地址:https://www.cnblogs.com/ben1992/p/5703870.html
Copyright © 2011-2022 走看看