美文网首页
Activity 管理工具

Activity 管理工具

作者: __Y_Q | 来源:发表于2020-09-28 14:19 被阅读0次

    我们做的 APP 上有没有遇到下面两种情况

    1. 在详情页或者某个页面点击某个操作的时候, 需要登录验证, 没有登录的时候需要跳转到登录界面, 但是有可能还需要再去注册. 注册成功后直接登录, 并且回到跳转登录前的页面.
    2. APP 需要单点登录, 有可能在任何一个页面, 我们正在使用的过程中, 在进行某个操作的时候突然弹窗提示账号在别的地方被登录了, 然后我们被挤下线. 那么这个弹窗要怎么处理呢?

    今天来做一个 ActivityManager 类. 直接复制过去就可以使用哟.

    /**
     * 懒汉式单例模式, DCL
     */
    public class ActivityManager {
    
        private static volatile ActivityManager mInstance;
    
        private Stack<Activity> mActivities;
    
        private ActivityManager() {
            mActivities = new Stack<>();
        }
    
        public static ActivityManager getInstance() {
            if (mInstance == null) {
                synchronized (ActivityManager.class) {
                    if (mInstance == null) {
                        mInstance = new ActivityManager();
                    }
                }
            }
            return mInstance;
        }
    
        public void attach(Activity activity) {
            mActivities.add(activity);
        }
    
        public void detach(Activity detachActivity) {
            int size = mActivities.size();
            for (int i = 0; i < size; i++) {
                Activity activity = mActivities.get(i);
                if (activity == detachActivity) {
                    mActivities.remove(i);
                    i--;
                    size--;
                }
            }
        }
    
        public void finish(Activity finishActivity) {
            int size = mActivities.size();
            for (int i = 0; i < size; i++) {
                Activity activity = mActivities.get(i);
                if (activity == finishActivity) {
                    mActivities.remove(i);
                    finishActivity.finish();
                    i--;
                    size--;
                }
            }
        }
    
        public void finish(Class<? extends BaseActivity> activityClass) {
            int size = mActivities.size();
            for (int i = 0; i < size; i++) {
                Activity activity = mActivities.get(i);
                if (activity.getClass().getCanonicalName().equals(activityClass.getCanonicalName())) {
                    mActivities.remove(i);
                    activity.finish();
                    i--;
                    size--;
                }
            }
        }
    
        public void exitApplication() {
            int size = mActivities.size();
            for (int i = 0; i < size; i++) {
                Activity activity = mActivities.get(i);
                mActivities.remove(i);
                activity.finish();
                i--;
                size--;
            }
            System.exit(0);
        }
    
    
        /**
         * 获得栈顶的 Activity
         *
         * @return
         */
        public Activity getTopOfStackActivity() {
            return mActivities.lastElement();
        }
    }
    

    接着在 BaseActivity

    public class BaseActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActivityManager.getInstance().attach(this);
        }
    
        @Override
        protected void onDestroy() {
            ActivityManager.getInstance().detach(this);
            super.onDestroy();
        }
    }
    

    使用

    public class MainActivity extends BaseActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            setTitle("MainActivity");
        }
    
        public void click(View view) {
            Intent intent = new Intent(this, HomeActivity.class);
            startActivity(intent);
        }
    }
    
    public class HomeActivity extends BaseActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            setTitle("HomeActivity");
        }
    
        public void click(View view) {
            Intent intent = new Intent(this, OrderActivity.class);
            startActivity(intent);
        }
    }
    
    public class OrderActivity extends BaseActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            setTitle("OrderActivity");
        }
    
        public void click(View view) {
            ActivityManager.getInstance().finish(this);
            ActivityManager.getInstance().finish(HomeActivity.class);
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:Activity 管理工具

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