Activity管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zsp_android_com/article/details/86081066
package util;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
 * Created on 2017/9/19.
 *
 * @author xxx
 * @desc 用于活动管理和应用退出
 * BaseActivity之OnCreate()推当前Activity至Activity管理容器,需时遍历容器,finish所有Activity。
 */
public class ActivitySuperviseUtils {
    private static final List<Activity> ACTIVITIES = Collections.synchronizedList(new LinkedList<Activity>());

    /**
     * 添Activity至堆栈
     *
     * @param activity 活动
     */
    public static void pushActivity(Activity activity) {
        ACTIVITIES.add(activity);
        LogManager.e("活动数", String.valueOf(ACTIVITIES.size()));
        for (int i = 0; i < ACTIVITIES.size(); i++) {
            LogManager.e("概览", ACTIVITIES.get(i).getClass().getSimpleName());
        }
        LogManager.e("推入", ACTIVITIES.get(ACTIVITIES.size() - 1).getClass().getSimpleName());
    }

    /**
     * 栈顶Activity(堆栈最后压入)
     */
    public static Activity getCurrentActivity() {
        if (ACTIVITIES == null || ACTIVITIES.isEmpty()) {
            return null;
        }
        return ACTIVITIES.get(ACTIVITIES.size() - 1);
    }

    /**
     * 查指定类名Activity
     *
     * @param cls cls
     * @return activity
     */
    public static Activity findActivity(Class<?> cls) {
        Activity targetActivity = null;
        if (ACTIVITIES != null) {
            for (Activity activity : ACTIVITIES) {
                if (activity.getClass().equals(cls)) {
                    targetActivity = activity;
                    break;
                }
            }
        }
        return targetActivity;
    }

    /**
     * 结束栈顶Activity(堆栈最后压入)
     */
    public static void finishCurrentActivity() {
        if (ACTIVITIES == null || ACTIVITIES.isEmpty()) {
            return;
        }
        Activity activity = ACTIVITIES.get(ACTIVITIES.size() - 1);
        finishActivity(activity);
    }

    /**
     * 结束指定Activity
     *
     * @param activity 活动
     */
    public static void finishActivity(Activity activity) {
        if (ACTIVITIES == null || ACTIVITIES.isEmpty()) {
            return;
        }
        if (activity != null) {
            ACTIVITIES.remove(activity);
            activity.finish();
        }
    }

    /**
     * 结束指定类名Activity
     *
     * @param cls cls
     */
    public static void finishActivity(Class<?> cls) {
        if (ACTIVITIES == null || ACTIVITIES.isEmpty()) {
            return;
        }
        for (Activity activity : ACTIVITIES) {
            if (activity.getClass().equals(cls)) {
                finishActivity(activity);
            }
        }
    }

    /**
     * 结束所有Activity
     */
    private static void finishAllActivity() {
        if (ACTIVITIES == null) {
            return;
        }
        for (Activity activity : ACTIVITIES) {
            activity.finish();
        }
        ACTIVITIES.clear();
    }

    /**
     * 退应用
     */
    public static void appExit() {
        try {
            finishAllActivity();
        } catch (Exception e) {
            LogUtils.e(e.getMessage());
        }
    }

    /**
     * 当前Activity名
     * info.topActivity.getShortClassName() Activity名
     * info.topActivity.getClassName() 类名
     * info.topActivity.getPackageName() 包名
     * info.topActivity.getClass() 类实例
     *
     * @param context 上下文
     * @return 当前Activity名
     */
    public static String getCurrentRunningActivityName(Context context) {
        ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        ActivityManager.RunningTaskInfo info = manager != null ? manager.getRunningTasks(1).get(0) : null;
        String activityName = info != null ? info.topActivity.getShortClassName() : null;
        LogManager.e("当前活动", activityName);
        return activityName;
    }

    /**
     * 栈顶Activity实例
     *
     * @return 栈顶Activity实例
     */
    public static Activity getTopActivityInstance() {
        Activity mBaseActivity;
        synchronized (ACTIVITIES) {
            final int size = ACTIVITIES.size() - 1;
            if (size < 0) {
                return null;
            }
            mBaseActivity = ACTIVITIES.get(size);
        }
        return mBaseActivity;
    }

    /**
     * 栈顶Activity名
     *
     * @return 栈顶Activity名
     */
    public String getTopActivityName() {
        Activity mBaseActivity;
        synchronized (ACTIVITIES) {
            final int size = ACTIVITIES.size() - 1;
            if (size < 0) {
                return null;
            }
            mBaseActivity = ACTIVITIES.get(size);
        }
        return mBaseActivity.getClass().getName();
    }
}

猜你喜欢

转载自blog.csdn.net/zsp_android_com/article/details/86081066