美文网首页
Android Framework学习之Context

Android Framework学习之Context

作者: 一只二凡子 | 来源:发表于2020-11-12 00:03 被阅读0次

    1.应用里有多少个Context?不同的Context之间有什么区别?

    2.Activity里的this和getBaseContext有什么区别?

    3.getApplication和getApplicationContext有什么区别?

    4.应用组件的构造、onCreate、attachBaseContext调用顺序?

    Context是一个抽象类,它的实现类是ContextImpl。它定义了一堆抽象函数,比如获取系统资源的,获取系统服务的,启动Activity的,发送广播的等。。

    Application、Activity、Service是有自己的Context的,广播和ContentProvider是没有自己的Context的。

    Application的Context其实就是new ContextImpl(...)对象然后赋给Application,Activity,Service的Context其实也一样

    广播的onReceive里的context是哪里来的?

    如果是动态注册的话就是注册广播时的用的context,如果是静态注册的话是以Application为mBase的ContentWrapper。

    ContentProvider里面有一个mContext的成员变量,是它初始化时外部传入的Application的context,ContentProvider的初始化虽然是在Application的构造函数以及attachBaseContext之后,但是它是在Application的onCreate之前调用的,也就是说ContentProvider的onCreate要比Application的onCreate提前调的。

    context的个数是进程中的Application,Activity,Service的总和,应用也可能是多进程的Application可能有多个,不同的是Activity因为要显示UI,它继承的是ContextThemeWrapper,而Application和Service继承的是ContextWrapper。

    Activity自己继承的就是Context的,所以this就是返回Activity自己,而getBaseContext返回的是ContextWrapper里的mBase.。

    getApplicationContext它是Context里的抽象函数,而getApplication是Activity和Service里特有的,它们返回的都是Application对象,它们的调用范围不一样,就好比你在广播里没法调用getApplication一样。

    相关文章

      网友评论

          本文标题:Android Framework学习之Context

          本文链接:https://www.haomeiwen.com/subject/ptpjbktx.html