Android(Kotlin)获取应用全局上下文 ApplicationContext

需求

Android(Kotlin)获取应用全局上下文 ApplicationContext

有些场景下需要使用的 Context,是和页面无关的,仅和应用进程相关,比如:读写文件或访问数据库。这些场景下,我们希望可以在项目内任意位置,直接获取应用全局上下文(ApplicationContext);而不是在 Activity、Fragment 或 Service 等组件里获取到Context,再作为参数到处传递。


解决方案

Application类,是和应用进程相关的,每个应用进程只有一个Application实例。Application中可获取ApplicationContext,此Context和页面等组件无关,只和应用进程相关。将获取到的ApplicationContext转化为顶层属性,则可以在项目任意位置调用。

实现步骤如下:

  1. 自定义 Application,保存自身的 Application 实例。
  2. 在AndroidManifest中,设置应用使用自定义Application。
  3. 定义顶层属性 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 方法执行顺序 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋冠巡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值