package cn.com.dhcc.di.ducha.utils; import android.app.Activity; import android.app.Application; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * Created by fhk on 2017/11/6. */ public class ActivityListUtil { public static List<Activity> getActivitiesByApplication(Application application) { List<Activity> list = new ArrayList<>(); try { Class<Application> applicationClass = Application.class; Field mLoadedApkField = applicationClass.getDeclaredField("mLoadedApk"); mLoadedApkField.setAccessible(true); Object mLoadedApk = mLoadedApkField.get(application); Class<?> mLoadedApkClass = mLoadedApk.getClass(); Field mActivityThreadField = mLoadedApkClass.getDeclaredField("mActivityThread"); mActivityThreadField.setAccessible(true); Object mActivityThread = mActivityThreadField.get(mLoadedApk); Class<?> mActivityThreadClass = mActivityThread.getClass(); Field mActivitiesField = mActivityThreadClass.getDeclaredField("mActivities"); mActivitiesField.setAccessible(true); Object mActivities = mActivitiesField.get(mActivityThread); // 注意这里一定写成Map,低版本这里用的是HashMap,高版本用的是ArrayMap if (mActivities instanceof Map) { @SuppressWarnings("unchecked") Map<Object, Object> arrayMap = (Map<Object, Object>) mActivities; for (Map.Entry<Object, Object> entry : arrayMap.entrySet()) { Object value = entry.getValue(); Class<?> activityClientRecordClass = value.getClass(); Field activityField = activityClientRecordClass.getDeclaredField("activity"); activityField.setAccessible(true); Object o = activityField.get(value); list.add((Activity) o); } } } catch (Exception e) { e.printStackTrace(); list = null; } return list; } }
获取app中所有activity集合
最新推荐文章于 2026-05-07 07:44:42 发布
本文介绍了一种通过反射机制从Android应用中获取所有活动(Activity)实例的方法。此方法适用于不同版本的Android系统,并能帮助开发者了解应用当前活动的状态。

1万+

被折叠的 条评论
为什么被折叠?



