Android插件化——深入理解Context机制

本文详细介绍了Android中Context的概念,包括其在应用不同组件(如Application、Activity、Service、ContentProvider和Broadcast Receiver)中的创建和获取过程。文章揭示了Context的重要性,特别是对于插件化开发的理解,帮助开发者深入理解Context在Android系统中的工作原理。
摘要由CSDN通过智能技术生成

1、Context介绍

Context在Android中表示上下文对象,也是开发中经常使用的类,如资源的获取、View的创建、窗口创建添加等,在Android的四大组件中也随处可见Context的身影,也是Context使用的主战场,可以说Context的重要程度非一般类可比,但很多人对其内部结构并不是很熟悉,最基本的将、经常使用的却不一定熟悉,是不是有点灯下黑的感觉,本篇文章就针对context在Android中的使用进行学习;

按照实际开发的使用场景来说,Context一般分两种:

  1. 使用Context调用方法,如Activity的启动、ContentProvider等
  2. 调用方法时传入context,如创建Dialog、View的创建等
  • Context的继承关系
    在这里插入图片描述
    这里先给出Android中Context的继承关系图,总结如下:
  1. ContextImpl和ContextWrapper都继承了Context,在ContextWrapper内部保存这ContextImpl的对象mBase;
  2. ContextThemeWrapper、Service、Application都继承于ContextWrapper,它们内部都可以通过mBase使用ContextImpl的方法;
  3. Activity继承ContextThemeWrapper类,因为ContextThemeWrapper扩展了Context的方法;

2、Application中Context创建和获取

Android进阶知识树——Android四大组件启动过程知道,程序进程启动后会执行到ActivityThread.handleBindApplication()中,其中就包含创建Application对象

Application app = r.packageInfo.makeApplication(false, mInstrumentation); //创建了Application并调用onCreate()初始化
2.1、Context创建过程
  • makeApplication():创建Application对象,调用onCreate()
public Application makeApplication(boolean forceDefaultAppClass,
        Instrumentation instrumentation) {
   
        appClass = "android.app.Application";
    try {
   
        java.lang.ClassLoader cl = getClassLoader();
        ContextImpl appContext = ContextImpl.createAppContext(mActivityThread, this);
        app = mActivityThread.mInstrumentation.newApplication( //调用Instrumentation创建Application
                cl, appClass, appContext);
        appContext.setOuterContext(app);//
    }
    return app;
}
  • ContextImpl.createAppContext()
static ContextImpl createAppContext(ActivityThread mainThread, LoadedApk packageInfo) {
   
        ContextImpl context = new ContextImpl(null, mainThread, packageInfo, null, null, null, 0,
                null);
        context.setResources(packageInfo.getResources());
        return context;
    }

在上面方法中直接创建了ContextImpl对象,并初始化ContextImpl对象中的Resou

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值