Android Activity的统一管理类

一、概述

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();
    }
   
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java基础 什么是重载,什么是重写?有什么区别?重载(Overload):(1)Overloading是一个类中...
    勤息嘻嘻嘻阅读 3,831评论 0 1
  • 转自 http://weishu.me/2016/03/21/understand-plugin-framewor...
    朱立志阅读 5,590评论 0 8
  • 《孙子兵法》说将领有五种危险,“必死,可杀也;必生,可虏也;忿速,可侮也;廉洁,可辱也;爱民,可烦也。”要杀死对方...
    岱挚阅读 1,684评论 0 0
  • 润雨 一盘棋,一张网,一场冲峰 有暗礁隐藏,布纵横交错 一低头一昂首 都在虚假和真实之间 总能不经意间 看到一条灰...
    原创润雨阅读 1,544评论 0 3
  • 之前听人提起简书,今日又看了朋友发表的简书短文,打了个$2的赏,随即下载来用用。 首次就写个今日工作心得吧。 有个...
    晨风_968b阅读 1,297评论 1 0

友情链接更多精彩内容