Activity的生命周期是谁调用的?
我们知道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的生命周期是谁调用的?相关推荐
- 横竖屏切换时候Activity的生命周期
曾经遇到过一个面试题,让你写出横屏切换竖屏Activity的生命周期.现在给大家分析一下他切换时具体的生命周期是怎么样的: 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activi ...
- Android开发---Activity的生命周期
在Android开发中,第一步学习的应该是最基础的东西,即Activity的声明周期,相信Activity对于从事Android开发的朋友都很熟悉,这里作者不多做解释.Android的生命周期可以用如 ...
- Android组件系列----Activity的生命周期
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- Activity的生命周期理解
Activity拥有4个基本状态: 活动状态:当前Activity位于前台,可以看见也可以获得焦点,可以接受用户输入的 暂停状态:其他Activity位于前台,该Activity依然可见,但是不能获得 ...
- android的应用入口点函数,android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明...
android应用程序,由一到多个Activity组成.每个Activity没有很紧密的联系,因为我们可以在自己的程序中调用其它Activity,特别是调用自己的代码之外生成的Activity,比如a ...
- Android学习笔记系列四2 —— Activity的生命周期
2019独角兽企业重金招聘Python工程师标准>>> 启动一个Activity 使用startActivity(Intent intent). intent指定了你想要启动的act ...
- activity 生命周期_从0系统学Android-2.4 Activity 的生命周期
本系列文章,参考<第一行代码>,作为个人笔记 更多内容:更多精品文章分类 本系列持续更新中-. 2.4 Activity 的生命周期 掌握 Activity 的生命周期对于开发者来说是非常 ...
- Android下Activity的生命周期
Activity的生命周期如上图所示.当系统调用一个活动时,每个回调函数依次调用. 转载于:https://www.cnblogs.com/hainange/archive/2013/04/25/61 ...
- android activity 回调函数,Android Activity的生命周期
Activity的生命周期 Android系统根据activity的所处不同阶段对应的唤起其特定的回调函数来执行代码.activity的一系列有序的生命周期回调函数.本文将来讨论下activity各阶 ...
最新文章
- mount -t 挂载指定的文件格式
- 团队项目第一阶段冲刺站立会议06
- 五分钟完成 ABP vNext 通讯录 App 开发
- 论调用约定__stdcall,__cdecl,__fastcall,thiscall,naked call
- python邮箱配置_python flask mail QQ邮箱配置
- java数组实验心得体会_JAVA实验报告心得
- VaR、CoVaR、delta CoVaR计算方法综述 案例与代码
- 模电课程设计_函数发生器
- 基因组测序分析linux,基因组数据的重测序分析
- 第六章-2 CS创建监听与payload
- Java实现XML格式化输出
- 投资中的N种认知偏差总有一款败你
- Fuzzing及Sulley简介
- 结对项目——二柱子再更新版
- One-Hot 独热编码
- matlab识别中国象棋棋盘,一种基于图像处理的中国象棋识别系统及方法与流程
- [读书笔记]Core Java: Volume I - Fundamentals Chapter 8
- 51nod 1355 斐波那契的最小公倍数
- 原生JS实现淡出淡入效果
- EasyJWeb Tools中代码自动生成引擎详解