通过反射获取当前Activity实例
2016-10-11 10:09
731 查看
步骤:
1、 获取ActivityThread中保存的所有的ActivityRecord
2 、从ActivityRecord中获取状态不是pause的Activity并返回,这个Activity就是当前处于活动状态的Activity
具体代码:
1、 获取ActivityThread中保存的所有的ActivityRecord
2 、从ActivityRecord中获取状态不是pause的Activity并返回,这个Activity就是当前处于活动状态的Activity
具体代码:
public static Activity getActivity() { Class activityThreadClass = null; try { activityThreadClass = Class.forName("android.app.ActivityThread"); Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null); Field activitiesField = activityThreadClass.getDeclaredField("mActivities"); activitiesField.setAccessible(true); Map activities = (Map) activitiesField.get(activityThread); for (Object activityRecord : activities.values()) { Class activityRecordClass = activityRecord.getClass(); Field pausedField = activityRecordClass.getDeclaredField("paused"); pausedField.setAccessible(true); if (!pausedField.getBoolean(activityRecord)) { Field activityField = activityRecordClass.getDeclaredField("activity"); activityField.setAccessible(true); Activity activity = (Activity) activityField.get(activityRecord); return activity; } } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } return null; }
相关文章推荐
- Java反射代码--01.通过类名称加载一个类并且获取当前类实例
- 安卓通过Application获取当前Activity的实例(程序中不推荐保存Activity的实例)
- C#反射 获取程序集信息和通过类名创建类实例
- Java中通过反射获取泛型实例
- Android 如何获取当前Activity实例对象?
- C#反射 获取程序集信息和通过类名创建类实例
- 获取当前活动的activity与实例的方法
- 通过ADB命令获取当前activity
- 获取当前活动的activity与实例的方法
- Java中通过反射获取泛型实例
- C#反射 获取程序集信息和通过类名创建类实例
- 通过反射技术获取泛型真实实例
- 通过反射获取窗体实例
- 通过反射根据类名获取到类的实例
- 通过子View获取当前Activity视图
- C# 通过反射获取实例对象
- 如何获取当前Activity实例
- Angular 通过注入 $location 获取与修改当前页面URL的实例
- Android 如何获取当前Activity实例对象?
- Android中通过view方式获取当前Activity的屏幕截图实现方法