android activity管理(二)之Activity(ActivityClientRecord)生命周期管理

ActivityClientRecord 是apk进程中一个Activity的代表,这个对象的activity成员引用真正的Activity组件,一个Activity涉及到哪些对象呢?

  • 1.Activity子类:应用实现的Activity实体
  • 2.ContextImpl:接口就是我们非常熟悉的Context
  • 3.PhoneWindow:接口是Window,这个对象可以理解为窗体的客户端,维护的是布局的xml文件,负责解析和加载控件
  • 4.DecorView:顶层控件,应用创建的控件只是它的子控件
  • 5.ViewRootImpl:这个对象可以理解为渲染引擎,负责渲染PhoneWindow中的控件到Surface上
  • 6.Surface:窗体的显示载体

下面上个图大家看一下这六大护法和ActivityClientRecord之间的关系:

一个Activity的显示,在apk进程中基本分为三个步骤:一是解析xml文件加载控件,第二是请求一个系统窗体返回一个Surface,第三个步骤是将控件画到Surface上.

UI线程处理Activity生命周期的方法主要有六个,下面逐个分析:

handleLaunchActivity()方法

  • 1.调用handleConfigurationChanged()更新资源配置
  • 2.调用 WindowManagerGlobal::initialize()方法初始化全局窗口管理系统,每一apk进程一个WindowManagerGlobal对象
  • 3.调用performLaunchActivity()拉起Activity
  • 4.调用handleResumeActivity()唤醒Activity

第三步和第四步是核心,第四步下面会讲到,现在主要分析performLaunchActivity()这个方法:

  • 1.加载Activity
  • 2.创建Context
  • 3.activity链接Context
  • 4.调用Activity的onCreate()方法

performLaunchActivity()这个执行流程中onCreate()方法需要调用Activity::setContentView(),setContentView()负责设置xml文件到PhoneWindow,PhoneWindow负责解析加载控件树,这个方法执行完,Activity启动的第一步骤也就完成了。

handleResumeActivity()方法

  • 1.调用performResumeActivity(),这个方法主要负责调用Activity的onResume()方法
  • 2.添加控件到窗口管理系统:wm.addView()添加DecorView控件树,创建ViewRootImpl, ViewRootImpl 从窗口管理系统请求一个窗体,返回这个窗体的Surface,然后将控件树渲染到Surface上,提交窗口管理系统显示,这里有一点需要注意,渲染的过程是UI 的下一个事件,所以当下面的第三步上报的时候还没有画完呢
  • 3.调用activityResumed()上报已经唤醒状态

handlePauseActivity()方法

  • 1.回调Activity的onPause()方法
  • 2.调用activityPaused()上报状态给AMS

handleStopActivity()方法

  • 1.保存状态
  • 2.回调Activity的onStop()方法

handleDestroyActivity()方法

  • 1.回调Activity的onDestory()方法
  • 2.清除上下文
  • 3.调用activityDestroyed()上报状态给AMS

handleRelaunchActivity()方法

relaunch就是先销毁在启动,这个一个很暴力的方法,有没有数据可以复用,大家可以研究研究,对暴力的方法改为部分数据可以复用,就是一种对系统的优化,但是千万不要引入问题哟

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值