Android里面的大BOSS---Context

凡事分门别类才好组织流畅的思路逻辑,而Android里使用的Java语言的继承特性本身就有从上而下的特点

首先挂张图

这里写图片描述

嗯?单看好像没什么感觉,不就是直接继承自java.lang.Object么

不过,细细的思考一下,好像其他类都跟Object相隔千山万水啊

例如俺们经常提到的四大组件

  • Activity
  • BroadcastReceiver
  • ContentProvider
  • Service

这里写图片描述


这里写图片描述


这里写图片描述


这里写图片描述

可以看到,Activity和Service都是Context的间接子类
(至于为什么BroadcastReceiver和ContentProvider为什么不是,我也很想知道)
从层级上看,Context是当之无愧的BOSS角色

接下来看看他会什么技能吧

public abstract class Context {

    // 获取应用程序包的AssetManager实例
    public abstract AssetManager getAssets();

    // 获取应用程序包的Resources实例
    public abstract Resources getResources();

    // 获取PackageManager实例,以查看全局package信息    
    public abstract PackageManager getPackageManager();

    // 获取应用程序包的ContentResolver实例
    public abstract ContentResolver getContentResolver();

    // 它返回当前进程的主线程的Looper,此线程分发调用给应用组件(activities, services等)
    public abstract Looper getMainLooper();

    // 返回当前进程的单实例全局Application对象的Context     
    public abstract Context getApplicationContext();

    // 从string表中获取本地化的、格式化的字符序列
    public final CharSequence getText(int resId) {
        return getResources().getText(resId);
    }

    // 从string表中获取本地化的字符串
    public final String getString(int resId) {
        return getResources().getString(resId);
    }

    public final String getString(int resId, Object... formatArgs) {
        return getResources().getString(resId, formatArgs);
    }

    // 返回一个可用于获取包中类信息的class loader
    public abstract ClassLoader getClassLoader();

    // 返回应用程序包名
    public abstract String getPackageName();

    // 返回应用程序信息
    public abstract ApplicationInfo getApplicationInfo();

    // 根据文件名获取SharedPreferences
    public abstract SharedPreferences getSharedPreferences(String name,
            int mode);

    // 其根目录为: Environment.getExternalStorageDirectory()

    public abstract File getExternalFilesDir(String type);

    // 返回应用程序obb文件路径
    public abstract File getObbDir();

    // 启动一个新的activity 
    public abstract void startActivity(Intent intent);

    // 启动一个新的activity 
    public void startActivityAsUser(Intent intent, UserHandle user) {
        throw new RuntimeException("Not implemented. Must override in a subclass.");
    }

    // 启动一个新的activity 
    // intent: 将被启动的activity的描述信息
    // options: 描述activity将如何被启动
    public abstract void startActivity(Intent intent, Bundle options);

    // 启动多个新的activity
    public abstract void startActivities(Intent[] intents);

    // 启动多个新的activity
    public abstract void startActivities(Intent[] intents, Bundle options);

    // 广播一个intent给所有感兴趣的接收者,异步机制 
    public abstract void sendBroadcast(Intent intent);

    // 广播一个intent给所有感兴趣的接收者,异步机制 
    public abstract void sendBroadcast(Intent intent,String receiverPermission);

    public abstract void sendOrderedBroadcast(Intent intent,String receiverPermission);

    public abstract void sendOrderedBroadcast(Intent intent,
            String receiverPermission, BroadcastReceiver resultReceiver,
            Handler scheduler, int initialCode, String initialData,
            Bundle initialExtras);

    public abstract void sendBroadcastAsUser(Intent intent, UserHandle user);

    public abstract void sendBroadcastAsUser(Intent intent, UserHandle user,
            String receiverPermission);

    // 注册一个BroadcastReceiver,且它将在主activity线程中运行
    public abstract Intent registerReceiver(BroadcastReceiver receiver,
                                            IntentFilter filter);

    public abstract Intent registerReceiver(BroadcastReceiver receiver,
            IntentFilter filter, String broadcastPermission, Handler scheduler);

    public abstract void unregisterReceiver(BroadcastReceiver receiver);

    // 请求启动一个application service
    public abstract ComponentName startService(Intent service);

    // 请求停止一个application service
    public abstract boolean stopService(Intent service);

    // 连接一个应用服务,它定义了application和service间的依赖关系
    public abstract boolean bindService(Intent service, ServiceConnection conn,
            int flags);

    // 断开一个应用服务,当服务重新开始时,将不再接收到调用, 
    // 且服务允许随时停止
    public abstract void unbindService(ServiceConnection conn);

    public abstract Object getSystemService(String name);

    public abstract int checkPermission(String permission, int pid, int uid);

    // 返回一个新的与application name对应的Context对象
    public abstract Context createPackageContext(String packageName,
            int flags) throws PackageManager.NameNotFoundException;

    // 返回基于当前Context对象的新对象,其资源与display相匹配
    public abstract Context createDisplayContext(Display display);
 }

猴赛雷啊,他可以getResource、startActivity、sendBroadcast、startActivity、getContentResolver

四大组件和很多资源都跟他有关系

updating中。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值