Android Context与Application

完全解析
详解
Context 介绍
Android 程序与Java程序都是用Java语言编写的,但最大的区别是,java随便一个类,在main()方法中就能跑了,但Android需要完整的Android环境,有Activity、Service、BroadcastReceiver、Content Provider等组件,这些不是像Java中的类,new一下就可以用的,它们需要各自的上下文环境,所以就需要Context。

Context的继承结构
Context的功能
如图,Context分为三种类型,Appliaciton、Service、Activity。具体功能包括弹出Toast、启动Activity、启动Service、发送广播、操作数据库等。通常状况下,三种类型的Context都可以进行通用,但又两种场景下需要使用特定的Context,①启动Activity.②弹出Dialog。原因:由于Android不允许Activity与Dialog凭空出现,Activity的启动需要启动在另一个Activity之上,以此形成返回栈。Dialog的显示需要在Activity中。所以,此时的Context需要Activity类型的Context。

一个应用中Context的数量
Context数量 = Service数量+Activity数量+1(Application数量)
不同场景使用Context
①:Dialog中使用Context,需要使用Activity.this的context,因为Dialog需要依附于Activity存在。
②:工具类中使用Context,需要使用的是getApplicationContext(),因为如果使用Activity的Context,则如果actiivty销毁,而工具类还持有引用,可能造成空指针异常。
③:如果是需要在当前View中显示,view结束则不会再显示,则无须使用全局,使用本地的Activity/VIew的Context即可。

Context的正确姿势:
1:当Application的Context能搞定的情况下,并且生命周期长的对象,优先使用Application的Context。
2:不要让生命周期长于Activity的对象持有到Activity的引用。
3:尽量不要在Activity中使用非静态内部类,因为非静态内部类会隐式持有外部类实例的引用,如果使用静态内部类,将外部实例引用作为弱引用持有。
转自:https://www.jianshu.com/p/94e0f9ab3f1d

Application 介绍
用途:初始化全局变量。
介绍:Application一个应用只有一个,生命周期为一个应用的开启到结束,本身是系统组件,已经为一个单例,无须再进行创建单例。
官方也不建议使用子类继承Application,但通常大家都自定义自己的Application,也无没什么不妥之处。
正确的单例用法:
在这里插入图片描述
使用
在Manifest.xml中声明,android:name=".xxx"
在这里插入图片描述
常见的Appliaction的Context

有图可知,在需要使用context的时候,需要在attachBaseContext之后进行使用,这样context才进行初始化完成,才可以使用通用的getPackageName()、getService()等操作,否则会造成空指针异常。

getApplicaiton()与getApplicationContext()的区别
getApplicaiton()与getApplicationContext()获取的对象都是同一对象,但getApplicationContext()的作用域更广一些,例如,在BroadReceiver中,只能调用到getApplicationContext()。

在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值