Android内核剖析读书笔记(2)—理解Context

一、一个应用程序包含多少个Context
     应用程序有多少个Activity或者Service,就有多少个Context

二、Context相关类的继承关系

a.Context:
    代表场景的一个抽象类
b.ContextWrapper:
    Context的一个包装,构造函数中包含一个真正的Context引用,同时提attachBaseActivity函数为其指定一个真正的Context对象
c.ContextThemeWrapper:
    内部包含主题相关的接口,即在AndroidManifest.xml中指定的android:theme
d.ContextImpl:
    真正实现了Context中的所有函数,应用中调用的所以context方法均来自于此类

三、创建Context对象
    i.Application对应的Context   
    a.程序启动时,Ams远程调用ActivityThread的bindApplication方法
    

    b.然后调用handleBindApplication()
    

    
    c.在 handleBindApplication中为AppBindData对象中的info域赋值,该info域的类型为LoadedApk,为ActivityThread类的全局对象,然后调用makeApplication方法获得ContextImpl
            

    d.然后在makeApplication方法中通过init将该ContextImpl赋给data.info,进而使Application获得ContextImpl
        

         ii.Activity对应的Context   
       a.启动Activity时,Ams通过IPC调用ActivityThread的scheduleLaunchActivity方法,该方法会创建ActivityRecord,ActivityThread使用其来管理Activity
        
             b.接着调用handleLaunchActivity
                
             C.接着调用performLaunchActivity
               
             d.接着将contextImpl赋给packageinfo
            

         iii.Service对应的Context
        a.启动Service时,Ams首先通过IPC调用ActivityThread的scheduleCreateService方法
        
            
        b.接着调用handleCreateService方法
        
            
        c.在handleCreateService方法中同样将contextImpl赋给packageinfo
          
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值