Java源码-Context源码解析

 

您好,我们来一起了解一下Java源码中的Context源码解析。

Context是Android中的一个重要的概念,在Android开发中可以用来获取应用程序的各种信息,如Activity、Service、Application等等。在Android中,Context是一个抽象类,它提供了很多方法用于获取当前应用程序的各种信息。

Context中的常用方法有:

  1. startActivity(Intent intent):启动一个Activity。

  2. bindService(Intent service, ServiceConnection conn, int flags):绑定一个Service。

  3. getApplicationContext():获取Application的Context。

  4. getSharedPreferences(String name, int mode):获取SharedPreferences对象,用于读取和写入数据。

  5. getPackageManager():获取PackageManager对象,用于获取应用程序的包信息。

  6. getResources():获取Resources对象,用于获取应用程序的资源信息。

  7. getSystemService(String name):获取系统服务。

下面我们来看一下Context的源码实现。

  1. Context的实现

Context是一个抽象类,定义了一些基本的方法,如startActivity()、bindService()、getApplicationContext()等等。

public abstract class Context {
    public abstract void startActivity(Intent intent);
    public abstract boolean bindService(Intent service, ServiceConnection conn, int flags);
    public abstract Context getApplicationContext();
    public abstract SharedPreferences getSharedPreferences(String name, int mode);
    public abstract PackageManager getPackageManager();
    public abstract Resources getResources();
    public abstract Object getSystemService(String name);
    //...
}

  1. ContextImpl的实现

ContextImpl是Context的一个实现类,它继承自ContextWrapper类。ContextWrapper是Context的装饰器,可以用来包装一个Context对象,以便于扩展或修改它的行为。

ContextImpl中实现了Context中的很多方法,如startActivity()、bindService()、getSharedPreferences()等等。同时,它也持有了一个ActivityThread对象,用于与系统的其他部分进行通信。

final class ContextImpl extends ContextWrapper {
    private final ActivityThread mMainThread;
    private final LoadedApk mPackageInfo;
    //...
    
    public ContextImpl(Context base, ActivityThread mainThread, LoadedApk packageInfo) {
        super(base);
        mMainThread = mainThread;
        mPackageInfo = packageInfo;
    }
    
    @Override
    public void startActivity(Intent intent) {
        //...
    }

    @Override
    public boolean bindService(Intent service, ServiceConnection conn, int flags) {
        //...
    }

    @Override
    public SharedPreferences getSharedPreferences(String name, int mode) {
        //...
    }

    @Override
    public PackageManager getPackageManager() {
        return mBase.getPackageManager();
    }

    @Override
    public Resources getResources() {
        //...
    }

    @Override
    public Object getSystemService(String name) {
        //...
    }
    //...
}

  1. ActivityThread的实现

ActivityThread是Android系统中的一个重要的类,它用于管理应用程序的主线程,同时也负责处理Activity、Service、BroadcastReceiver等组件的生命周期。

在ContextImpl中,我们可以看到它持有了一个ActivityThread的引用,用于与ActivityThread进行通信。

final class ActivityThread {
    //...
    
    public static ActivityThread currentActivityThread() {
        return sCurrentActivityThread;
    }
    
    public static Application currentApplication() {
        //...
    }
    
    public final LoadedApk getPackageInfoNoCheck(ApplicationInfo ai, CompatibilityInfo compatInfo) {
        //...
    }
    
    public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, int flags) {
        //...
    }
    //...
}

总结

Context是Android开发中的一个重要概念,它提供了很多方法用于获取应用程序的各种信息。在Android源码中,Context是一个抽象类,它的实现类有ContextImpl等。同时,ContextImpl持有了一个ActivityThread的引用,用于与ActivityThread进行通信。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值