改写android Context

原文地址:打脸现场!Android面试官:Context都说不明白也来面高工?你是来搞笑的吧? https://www.jianshu.com/p/2a0cf846ade3 .
本文是对原文的改写

一  前言

Activity mActivity =new Activity(); 
QA:android的new对象和java的new对象一样吗?
an:不一样. java是new一个对象.android是new一个组件。组件包括对象和Context.

二 Context定义: 

语境; 上下文; 背景; 环境

它是一个抽象类.

三 作用

通过实现Context类,可以获取应用程序的资源和类(包括应用级别操作,如启动Activity,发广播,接受Intent等).

类图关系

类图说明

角色类分类作用
context

abstract类.

它有两个具体的实现子类:ContextImpl和ContextWrapper
ContextWrapper包装类调用ContextImpl
ContextImpl实现类真正实现了Context中的所有函数
Activity,Application,ServiceActivity继承自ContextWrapper的子类ContextThemeWrapper.
Application,Service继承自ContextWrapper

Context 与四大组件的关系

Activity,Service,Application是Context的具体实现子类.
Broadcast Receiver,Content Provider并不是Context的子类,他们所持有的Context都是其他地方传过去的。
Context数量=Activity数量+Service数量+1.

四 Context作用域

五 使用

1 如何获取Context

通常我们想要获取Context对象,主要有以下四种方法.

返回值备注
View.getContext当前View对象的Context对象通常是当前正在展示的Activity对象
Activity.getApplicationContext当前Activity所在的(应用)进程的Context对象使用Context对象时,要优先考虑这个全局的进程Context
Activity.this当前的Activity实例如果是UI控件需要使用Activity作为Context对象,但是默认的Toast实际上使用ApplicationContext也可以。
ContextWrapper.getBaseContext()获取一个ContextWrapper进行装饰之前的Context这个方法在实际开发中使用并不多,也不建议使用。

2 代码实现

TextView tv = new TextView(getContext());
ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
AudioManager am = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);getApplicationContext().getSharedPreferences(name, mode);
getApplicationContext().getContentResolver().query(uri, ...);
getContext().getResources().getDisplayMetrics().widthPixels * 5 / 8;
getContext().startActivity(intent);
getContext().startService(intent);
getContext().sendBroadcast(intent);
//获取的是主线程的Looper
new Handler( getContext().getMainLooper() ).post( new Runnable()
{
        @Override
        public void run()
        {
           dosomething();
            ......
        }
} );
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值