前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安卓activity管理器

安卓activity管理器

作者头像
阿超
发布2022-08-16 17:04:03
5610
发布2022-08-16 17:04:03
举报
文章被收录于专栏:快乐阿超快乐阿超

悲剧就是把有价值的东西毁灭给人看。——鲁迅

其实原理就是一个list,使用AOP在创建时添加,销毁时移除

代码语言:javascript
复制
package com.ruben.utils;

import android.app.Activity;
import android.os.Build;

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

/**
 * @ClassName: MyActivityManager
 * @Description: 我还没有写描述
 * @Date: 2020/10/18 0018 10:16
 * *
 * @author: <achao1441470436@gmail.com>
 * @version: 1.0
 * @since: JDK 1.8
 */
public class MyActivityManager {

    public static final List<Activity> activityList = Collections.synchronizedList(new LinkedList<>());

    public static void addActivity(Activity activity) {
        activityList.add(activity);
    }

    public static void removeActivity(Activity activity) {
        activityList.remove(activity);
    }

    public static Activity getActivity() {
        if (isActivityEmpty()) {
            return null;
        }
        return activityList.get(activityList.size() - 1);
    }

    public static void killActivity() {
        killActivity(getActivity());
    }

    public static void killActivity(Activity activity) {
        if (activity == null) {
            return;
        }
        if (isActivityEmpty()) {
            return;
        }
        activity.finish();
        removeActivity(activity);
    }

    public static void killActivity(Class<?> cls) {
        Activity activity = getActivity(cls);
        if (activity == null) {
            return;
        }
        killActivity(activity);
    }


    public static Activity getActivity(Class<?> cls) {
        if (isActivityEmpty()) {
            return null;
        }
        if (cls == null) {
            return null;
        }
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
            return null;
        }
        List<Activity> activities = activityList.stream().filter(activity -> activity.getClass().equals(cls)).collect(Collectors.toList());
        if (activities.isEmpty()) {
            return null;
        }
        return activities.get(0);
    }

    public static Activity getTopActivity() {
        Activity activity = null;
        synchronized (activityList) {
            final int index = activityList.size() - 1;
            if (index < 0) {
                return null;
            }
            activity = activityList.get(index);
        }
        return activity;
    }

    public static String getTopActivityName() {
        Activity topActivity = getTopActivity();
        if (topActivity == null) {
            return null;
        }
        return topActivity.getClass().getName();
    }

    public static void killAllActivity() {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
            return;
        }
        activityList.forEach(Activity::finish);
        activityList.clear();
    }

    private static boolean isActivityEmpty() {
        return activityList.isEmpty();
    }

}

然后上篇博客配了Aspectj

这里就直接使用

代码语言:javascript
复制
package com.ruben.aop;

import android.app.Activity;
import android.app.Application;
import android.util.Log;

import com.ruben.manager.MyActivityLifecycleCallbacks;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

import lombok.SneakyThrows;

/**
 * @ClassName: MyActivityManagerAop
 * @Description: 我还没有写描述
 * @Date: 2020/10/18 0018 11:40
 * *
 * @author: <achao1441470436@gmail.com>
 * @version: 1.0
 * @since: JDK 1.8
 */
@Aspect
public class MyActivityManagerAop {

    @Pointcut("execution(* com.ruben..*.onCreate(..))")
    public void onCreatePointcut() {

    }

    @SneakyThrows
    @Around("onCreatePointcut()")
    public Object addActivity(final ProceedingJoinPoint joinPoint) {
        Object object = joinPoint.getTarget();
        if (!(object instanceof Activity)) {
            return joinPoint.proceed();
        }
        Activity activity = (Activity) object;
        Application application = activity.getApplication();
        MyActivityLifecycleCallbacks myActivityLifecycleCallbacks = new MyActivityLifecycleCallbacks();
        application.registerActivityLifecycleCallbacks(myActivityLifecycleCallbacks);
        Log.i(activity.getClass().getName(), "aop execute correct");
        return joinPoint.proceed();
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档