necesidad
Android (Kotlin) obtiene el contexto global de la aplicación ApplicationContext .
El contexto que debe usarse en algunos escenarios no tiene nada que ver con la página y solo está relacionado con el proceso de la aplicación, como: leer y escribir archivos o acceder a bases de datos. En estos escenarios, esperamos poder obtener directamente el contexto de la aplicación global (ApplicationContext) en cualquier parte del proyecto, en lugar de obtener el Contexto en componentes como Actividad, Fragmento o Servicio, y pasarlo como un parámetro.
solución
La clase de aplicación está relacionada con el proceso de aplicación y cada proceso de aplicación tiene solo una instancia de aplicación. El ApplicationContext se puede obtener en la aplicación, y este contexto no tiene nada que ver con componentes como páginas, sino solo con el proceso de la aplicación. Convierta el ApplicationContext obtenido en un atributo de nivel superior, al que se puede llamar en cualquier parte del proyecto.
Los pasos de implementación son los siguientes:
- Personalice la aplicación y guarde su propia instancia de la aplicación.
- En AndroidManifest, la aplicación de configuración usa una aplicación personalizada.
- Defina el atributo de nivel superior appContext, que se asigna como ApplicationContext de la instancia de la aplicación.
código central
Aplicación personalizada
package com.example.applicationcontext
import android.app.Application
/**
* 自定义 Application
*/
class MyApplication : Application() {
companion object {
lateinit var instance: Application
}
init {
instance = this
}
}
Configurar el manifiesto de Android
La etiqueta <application> establece el atributo de nombre y el valor del atributo es una aplicación personalizada.
<?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>
Titular de contexto
Cree el archivo ContextHolder.kt y convierta ApplicationContext en el atributo de nivel superior appContext en este archivo para llamar al proyecto.
package com.example.fileio.util
import android.content.Context
import com.example.fileio.MyApplication
val appContext: Context = MyApplication.application.applicationContext
transferir
En cualquier parte del proyecto, puede llamar a appContext
package com.example.applicationcontext
import com.example.applicationcontext.manage.appContext
class Test {
fun test() {
appContext
}
}
Imagen de muestra
Proyecto de muestra (Gitee código abierto)
Android/ApplicationContext Song Guanxun/Example- Code Cloud- Open Source China (gitee.com)
Descripción de la aplicación
Aplicación: la clase base para mantener el estado global de la aplicación.
Aplicación | Desarrolladores de Android (google.cn)
getApplicationContext() Descripción
Devuelve el contexto del objeto de aplicación globalmente único del proceso actual.
Este contexto (ApplicationContext) solo debe usarse cuando se requiere un contexto cuya vida útil sea independiente del contexto actual.
Este contexto está asociado con el ciclo de vida del proceso , no con el componente actual.