Android(3)Activity总结之一

  • 系统内部是如何启动一个Activity?
  • 新的Activity对象是在何时创建?
  • Activity的onCreate在何时被回调?

当我们需要创建一个Activity时,也许知识一句onCreate就完事了,也是没有想过这一过程系统为我们做了哪些事。

复习

当我们使用AIDL进行IPC时系统会为我们自动生成一个相应的类,这个类首先继承了IInterface,其内部有两个子类第一个子类为Stub此类是一个抽象类,继承了Binder并且实现了其父类接口;另一个类为Proxy类;Binder总是运行在创建它的进程/线程中,当我们通过Binder进行RMI的时候,如果当前线程和Binder再同一个进程/线程,则返回的是Stub内部类的实例,当我们跨进程/线程时则返回的时Proxy内部类的实例。


为什么要复习呢

我们运行是的主线程UI线程,Main thread,其是ActivityThread的一个实例,其内部有个类ApplicationThread(app.thread),此类是ApplicationThreadNative的实例,而ApplicationThreadNative实现了IApplicationThread接口,并且继承了Binder,IApplicationThread继承自IInterface,怎么样是不是和AIDL很像。


我认为,Activity的创建就是一次RMI的过程。

当我们要创建Activity时,不管是通过startActivity还是其他方法,最终都会调用startActivityForResult这个方法,在此方法中将所需数据保存在Instrumentation这个类中,再通过这个类调用其方法;在Instrumentation中会调用ActivityManagerService的方法,AMS会调用ActivityStackSupervisor的方法,之后又会调用ApplicationThread的scheduleLaunchActivity方法,ApplicationThread通过H(一个ActivityThread的Handler)发送信息,handleMessage会调用ActivityThread的handleLaunchActivity,之后调用performLaunchActivity,这个方法就是我们要找的那个方法。
在此方法中,从Instrumentation提取信息,进行一些初始化,之后创建ContentImpl完成与Activity的绑定,之后与Window进行绑定,最后回调onCreate方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值