Android 中获取当前的 Activity
2016-06-18 19:42
495 查看
需求:获取当前的
文章来自: http://hanks.xyz
Activity对象,
Activity是系统创建的,一种方法:在
onCreate的时候拿到引用,这样就得修改
onCreate方法,还得维护一个数组去管理
Activity的引用。第二种方法:通过反射拿到
ActivityThread中的
mActivities属性,进而拿到当前的 activity 对象( paused 为 false 的activity)。
public static Activity getActivity() { try { Class activityThreadClass = Class.forName("android.app.ActivityThread"); Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null); Field activitiesField = activityThreadClass.getDeclaredField("mActivities"); activitiesField.setAccessible(true); Map activities = null; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { // 4.4 以下使用的是 HashMap activities = (HashMap) activitiesField.get(activityThread); }else{ // 4.4 以上使用的是 ArrayMap activities = (ArrayMap) activitiesField.get(activityThread); } for (Object activityRecord : activities.values()) { Class activityRecordClass = activityRecord.getClass(); Field pausedField = activityRecordClass.getDeclaredField("paused"); // 找到 paused 为 false 的activity pausedField.setAccessible(true); if (!pausedField.getBoolean(activityRecord)) { Field activityField = activityRecordClass.getDeclaredField("activity"); activityField.setAccessible(true); Activity activity = (Activity) activityField.get(activityRecord); return activity; } } } catch (Exception e) { e.printStackTrace(); } return null; }
文章来自: http://hanks.xyz
相关文章推荐
- [Android]Android之解析zip
- android实现文件的断点上传
- Android 通过DownloadManager实现自动更新的demo
- Android中ListView的使用(一)----- 简单填充数据
- Android初级教程进程间的通信AIDL
- Android初级教程进程间的通信AIDL
- Android四大组件详解
- android事件拦截分析(一)
- 菜鸟学android之一——xml文件常用属性总结
- 改变ViewPager 滑动时间
- android图片加载各种问题小结
- Android-内存优化-首页内存占用优化
- Android性能优化一些方法
- Android Scroll分析(三)----Scroller
- Android listview的多布局实现
- RecycleBin
- Android DrawerLayout和Navigationview实现类似于QQ的侧面导航
- Android L**MM music Service笔记
- android5.0之Activity过渡动画
- Textview换行显示—换行符