美文网首页
Android Activity的统一管理类

Android Activity的统一管理类

作者: Sky_Blue | 来源:发表于2017-11-17 10:11 被阅读254次

    一、概述

    Android实际开发中经常会有以下需求:

    1.当你的应用打开多个页面的时候,怎么优雅的退出应用程序?
    
    2.当你打开多个页面的时候,怎么回到应用首页?
    

    二、实现思路

    退出应用程序无非是将所有打开的页面关闭销毁,如果有必要顺便杀死自己的应用进程。
    那怎么样才能一次性关闭多个打开的页面呢?无非就是将打开的页面用一个集合进行记录。
    

    三、实现

    1.全局使用统一的类进行管理,使用单例模式
    
    2.用集合记录打开的Activity,在Activity创建的时候添加,销毁的时候移除。
    

    四、代码实现

    /**
     * Activity的统一管理类
     */
    public class ActivityUtils {
        private static volatile ActivityUtils mInstance;
        /**
         * 所有打开的Activity
         */
        private final CopyOnWriteArrayList<Activity> mActivities;
    
        private ActivityUtils() {
            mActivities = new CopyOnWriteArrayList<>();
        }
        
        public static ActivityUtils getDefault() {
            if (mInstance == null) {
                synchronized (ActivityUtils.class) {
                    if (mInstance == null) {
                        mInstance = new ActivityUtils();
                    }
                }
            }
            return mInstance;
        }
    
        /**
         * 添加统一管理
         */
        public void attach(Activity activity) {
            mActivities.add(activity);
        }
    
        /**
         * 移除解绑 - 防止内存泄漏
         *
         * @param detachActivity
         */
        public synchronized void detach(Activity detachActivity) {
            int size = mActivities.size();
            for (int i = 0; i < size; i++) {
                if (mActivities.get(i) == detachActivity) {
                    mActivities.remove(i);
                    size--;
                    i--;
                }
            }
        }
    
        /**
         * 根据Activity的类名关闭 Activity
         */
        public void finish(Class<? extends Activity> activityClass) {
            for (int i = 0; i < mActivities.size(); i++) {
                Activity activity = mActivities.get(i);
                if (activity.getClass().getCanonicalName().equals(activityClass.getCanonicalName())) {
                    activity.finish();
                    break;
                }
            }
        }
    
        /**
         * 退出整个应用
         */
        public void exit() {
            int size = mActivities.size();
            for (int i = 0; i < size; i++) {
                Activity activity = mActivities.get(i);
                activity.finish();
            }
        }
    
        /**
         * 获取当前的Activity(最前面)
         */
        public Activity getCurrentActivity() {
            return mActivities.get(mActivities.size() - 1);
        }
    }
    

    5.Activity使用

    /**
     * Activity的Base类
     */
    
    public abstract class BaseActivity extends SwipeBackActivity {
        protected HttpUtils mHttpUtils;
        protected View mContentView;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActivityUtils.getDefault().attach(this);
           
        }
        @Override
        protected void onDestroy() {
            ActivityUtils.getDefault().detach(this);
            super.onDestroy();
        }
       
    }
    

    相关文章

      网友评论

          本文标题:Android Activity的统一管理类

          本文链接:https://www.haomeiwen.com/subject/oevdvxtx.html