我们知道Activity的生命周期包括onCreate、onStart、onResume、onRestart、onStop、onDestory、onSaveInstanceState、onRestoreInstanceState等等, 那么是谁调用了它呢?

答:是ActivityThread调度的, 具体逻辑封装在Instrumentation类里。 好好看看这2个类就明白了。

Instrumentation类封装了Activity各个生命周期的方法,  所以想办法替换mInstrumentation参数就可以了。 因为sCurrentActivityThread是单例的,所以hook它就OK了。

public class TheApplication extends Application {.....private class InstrumentationProxy extends Instrumentation {private Instrumentation oldInstance;public InstrumentationProxy(Instrumentation instrumentation) {oldInstance = instrumentation;  //取消hook时使用
        }@Overridepublic void callActivityOnResume(Activity activity) {Log.d("brycegao", activity.getClass().toString() + " 执行了onPause方法");super.callActivityOnResume(activity);}@Overridepublic void callActivityOnStop(Activity activity) {Log.d("brycegao", activity.getClass().toString() + " 执行了onStop方法");super.callActivityOnStop(activity);}}@Overridepublic void onCreate() {super.onCreate();try {Class<?> clz = Class.forName("android.app.ActivityThread");Method method = clz.getDeclaredMethod("currentActivityThread");method.setAccessible(true);Object currentThread = method.invoke(null);Field mInstrumentationField = clz.getDeclaredField("mInstrumentation");mInstrumentationField.setAccessible(true);Instrumentation mInstrumentation = (Instrumentation) mInstrumentationField.get(currentThread);Instrumentation proxy = new InstrumentationProxy(mInstrumentation);mInstrumentationField.set(currentThread, proxy);} catch (Exception ex) {}.....}
}

运行看看效果:

ActivityThread有个成员变量mH, 它是干嘛用的?

   final H mH = new H();

类H继承于Handler, mH是为了实现异步操作,所有操作都放到主线程MessageQueue队列里实现。  比如A进程打开B进程的Activity, 通过Binder机制由ActivityManagerProxy执行启动activity的逻辑, 但这个操作是异步的。 A进程相当于做个触发事件, 不会阻塞等待B进程的activity启动。

转载于:https://www.cnblogs.com/chenxibobo/p/9640085.html

Activity的生命周期是谁调用的?相关推荐

  1. 横竖屏切换时候Activity的生命周期

    曾经遇到过一个面试题,让你写出横屏切换竖屏Activity的生命周期.现在给大家分析一下他切换时具体的生命周期是怎么样的: 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activi ...

  2. Android开发---Activity的生命周期

    在Android开发中,第一步学习的应该是最基础的东西,即Activity的声明周期,相信Activity对于从事Android开发的朋友都很熟悉,这里作者不多做解释.Android的生命周期可以用如 ...

  3. Android组件系列----Activity的生命周期

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  4. Activity的生命周期理解

    Activity拥有4个基本状态: 活动状态:当前Activity位于前台,可以看见也可以获得焦点,可以接受用户输入的 暂停状态:其他Activity位于前台,该Activity依然可见,但是不能获得 ...

  5. android的应用入口点函数,android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明...

    android应用程序,由一到多个Activity组成.每个Activity没有很紧密的联系,因为我们可以在自己的程序中调用其它Activity,特别是调用自己的代码之外生成的Activity,比如a ...

  6. Android学习笔记系列四2 —— Activity的生命周期

    2019独角兽企业重金招聘Python工程师标准>>> 启动一个Activity 使用startActivity(Intent intent). intent指定了你想要启动的act ...

  7. activity 生命周期_从0系统学Android-2.4 Activity 的生命周期

    本系列文章,参考<第一行代码>,作为个人笔记 更多内容:更多精品文章分类 本系列持续更新中-. 2.4 Activity 的生命周期 掌握 Activity 的生命周期对于开发者来说是非常 ...

  8. Android下Activity的生命周期

    Activity的生命周期如上图所示.当系统调用一个活动时,每个回调函数依次调用. 转载于:https://www.cnblogs.com/hainange/archive/2013/04/25/61 ...

  9. android activity 回调函数,Android Activity的生命周期

    Activity的生命周期 Android系统根据activity的所处不同阶段对应的唤起其特定的回调函数来执行代码.activity的一系列有序的生命周期回调函数.本文将来讨论下activity各阶 ...

最新文章

  1. mount -t 挂载指定的文件格式
  2. 团队项目第一阶段冲刺站立会议06
  3. 五分钟完成 ABP vNext 通讯录 App 开发
  4. 论调用约定__stdcall,__cdecl,__fastcall,thiscall,naked call
  5. python邮箱配置_python flask mail QQ邮箱配置
  6. java数组实验心得体会_JAVA实验报告心得
  7. VaR、CoVaR、delta CoVaR计算方法综述 案例与代码
  8. 模电课程设计_函数发生器
  9. 基因组测序分析linux,基因组数据的重测序分析
  10. 第六章-2 CS创建监听与payload
  11. Java实现XML格式化输出
  12. 投资中的N种认知偏差总有一款败你
  13. Fuzzing及Sulley简介
  14. 结对项目——二柱子再更新版
  15. One-Hot 独热编码
  16. matlab识别中国象棋棋盘,一种基于图像处理的中国象棋识别系统及方法与流程
  17. [读书笔记]Core Java: Volume I - Fundamentals Chapter 8
  18. 51nod 1355 斐波那契的最小公倍数
  19. 原生JS实现淡出淡入效果
  20. EasyJWeb Tools中代码自动生成引擎详解

热门文章

  1. [转载]PhotoShop性能优化
  2. 更改Webshpere的profile端口及删除profile
  3. ASPNET服务器控件之一
  4. 给新手或者中级程序员提的22条重要建议.
  5. 示波器探头×1和×10的意义
  6. 数组公式基本功修炼之初步使用
  7. int 做除法运算数据丢失【BigDecimal 重现数字】
  8. JavaScriptjQuery.变量作用域
  9. 短视频的生成,不要在技术上想当然
  10. Swift标识符和keyword