Android Activity的统一管理类

2017-11-17  本文已影响254人  Sky_Blue

一、概述

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();
    }
   
}
上一篇下一篇

猜你喜欢

热点阅读