Application的Context是一个全局静态变量,SDK的说明是只有当你引用这个context的生命周期超过了当前activity的生命周期,而和整个应用的生命周期挂钩时,才去使用这个application的context。

一种推荐的用法就是应用程序注册广播broadcast时,使用这个context。

引用application context并不会导致内存泄漏。引用activity的context才会导致内存泄漏,当你的引用对象的生命周期超过了当前activity的生命周期时,系统回收你的activity时发现还有一个context的强引用,而不去销毁这个activity,导致内存泄漏,在开发过程中,需要非常重视这点(一个全局静态变量在引用context时一定要使用application的Context, 而不要使用activity的)

什么是Content

1、它描述的是一个应用程序环境的信息,即上下文。

2、该类是一个抽象(abstract class)类,Android提供了该抽象类的具体实现类(后面我们会讲到是ContextIml类)。

3、通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent

信息 等。。

 

应用程序创建Context实例的情况有如下几种情况:

1、创建Application 对象时, 而且整个App共一个Application对象

2、创建Service对象时

3、创建Activity对象时

因此应用程序App共有的Context数目公式为:

 

总Context实例个数 = Service个数 + Activity个数 + 1(Application对应的Context实例)


 

 

具体创建Context的时机

 

1、创建Application对象的时机

 

每个应用程序在第一次启动时,都会首先创建Application对象。如果对应用程序启动一个Activity(startActivity)流程比较

清楚的话,创建Application的时机在创建handleBindApplication()方法中

2、创建Activity对象的时机

 

通过startActivity()或startActivityForResult()请求启动一个Activity时,如果系统检测需要新建一个Activity对象时,就会

回调handleLaunchActivity()方法,该方法继而调用performLaunchActivity()方法,去创建一个Activity实例,并且回调

onCreate(),onStart()方法等。

3、创建Service对象的时机

 

通过startService或者bindService时,如果系统检测到需要新创建一个Service实例,就会回调handleCreateService()方法,

完成相关数据操作。

 还有就是,在使用context的时候,小心内存泄露,防止内存泄露,注意一下几个方面:

1. 不要让生命周期长的对象引用activity context,即保证引用activity的对象要与activity本身生命周期是一样的

2. 对于生命周期长的对象,可以使用application context

3. 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化

现在回到正题,说一下android全局变量,在平时的开发过程中,有时候可能会需要一些全局数据,来让应用中的所有Activity和View都能访问到,大家在遇到这种情况时,可能首先会想到自己定义一个类,然后创建很多静态成员,android已经为我们提供了这种情况的解决方案:

在Android中,有一个Application类,在Activity中可以使用getApplication()方法获得实例,使用它就可以获得当前应用的主题、资源文件中的内容等,这个类更灵活的一个特性就是可以被继承,来添加自己的全局属性.


更多相关文章

  1. Android(安卓)ConstraintLayout详解
  2. Android(安卓)apk动态加载机制的研究(二)
  3. JNI 引用问题梳理
  4. 安卓如何创建右上角点击菜单
  5. [原]Android(安卓)develop tricks——整理自国外的一些Blog
  6. 谷歌官方Android应用架构库——处理生命周期
  7. android拾遗——四大基本组件介绍与生命周期
  8. AIDL 消息通信
  9. Kotlin For Android介绍

随机推荐

  1. Android(安卓)NFC开发-实践篇
  2. android静音模式下仍可以播放媒体声音以
  3. Android 语音识别学习小记--暑期大学生博
  4. Android(安卓)ScrollView嵌套WebView
  5. android 安全讲座第四层 手机Root授权原
  6. Android按钮的点击效果的总结
  7. android ant 打包遇到[aapt] invalid res
  8. Android(安卓)集成海康威视监控 SDK,实现
  9. Android Wear:创建可穿戴应用 - 概述
  10. Android Scroll分析