Android(Kotlin)获取应用全局上下文 ApplicationContext
Android(Kotlin)获取应用全局上下文 ApplicationContext。有些场景下需要使用的 Context,是和页面无关的,仅和应用进程相关,比如:读写文件或访问数据库。这些场景下,我们希望可以在项目内任意位置,直接获取应用全局上下文(ApplicationContext);而不是在 Activity、Fragment或 Service 等组件里获取到Context,再作为参数到
需求
Android(Kotlin)获取应用全局上下文 ApplicationContext。
有些场景下需要使用的 Context,是和页面无关的,仅和应用进程相关,比如:读写文件或访问数据库。这些场景下,我们希望可以在项目内任意位置,直接获取应用全局上下文(ApplicationContext);而不是在 Activity、Fragment 或 Service 等组件里获取到Context,再作为参数到处传递。
解决方案
Application类,是和应用进程相关的,每个应用进程只有一个Application实例。Application中可获取ApplicationContext,此Context和页面等组件无关,只和应用进程相关。将获取到的ApplicationContext转化为顶层属性,则可以在项目任意位置调用。
实现步骤如下:
- 自定义 Application,保存自身的 Application 实例。
- 在AndroidManifest中,设置应用使用自定义Application。
- 定义顶层属性 appContext,它被赋值为 Application 实例的 ApplicationContext。
核心代码
自定义 Application
package com.example.applicationcontext
import android.app.Application
/**
* 自定义 Application
*/
class MyApplication : Application() {
companion object {
lateinit var instance: Application
}
init {
instance = this
}
}
配置 AndroidManifest
<application>标签设置 name 属性,属性值为自定义Application。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:name=".MyApplication"
</application>
</manifest>
ContextHolder
建立 ContextHolder.kt 文件,在此文件内将 ApplicationContext 转化为顶层属性appContext,以供项目内调用。
package com.example.fileio.util
import android.content.Context
import com.example.fileio.MyApplication
val appContext: Context = MyApplication.application.applicationContext
调用
项目内任意位置,可以调用到 appContext
package com.example.applicationcontext
import com.example.applicationcontext.manage.appContext
class Test {
fun test() {
appContext
}
}
示例图片
示例项目(Gitee开源)
Android/ApplicationContext · 宋冠巡/示例 - 码云 - 开源中国 (gitee.com)
Application 说明
Application :用于维护应用程序全局状态的基类。
Application | Android Developers (google.cn)
getApplicationContext() 说明
返回当前进程的全局唯一的Application对象的上下文。
当需要一个生命周期与当前上下文分离的上下文时,才应该使用该上下文(ApplicationContext)。
该上下文与进程的生命周期关联,而不是与当前组件相关联。
参考
Context的应用场景
Application 方法执行顺序
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)