一、概念
1.1 生命周期
onCreate() |
在创建应用程序时调用。可以重写这个方法来实现实例化应用程序单态,以及创建和实例化任何程序状态变量和共享资源。
|
onTerminate() | 终止应用程序时调用,不能保证一定会被调用。 |
onLowMemory() |
当系统处于资源匮乏的时候,具有良好行为的应用程序可以释放额外的内存。这
个方法一般只会在后台进程已经终止,但是前台应用程序仍然缺少内存时调用。可以重写这个处理程序来清空缓存或释放不必要的资源。
|
onTrimMemory() |
作为
onLowMemory
的一个特定于应用程序的替代选择,在
Android4.0
时引
入。当运行时决定当前应用程序应该尝试减少其内存开销时调用,它包含一个
level
参数,用于提供请求 的上下文。
|
onConfigurationChanged()
|
与
Activity
不同,在配置改变时,应用程序对象不会被终止和重启。
如果应用程序使用的值依赖于特定的配置,则重写这个方法来重新加载这些值,或在应用程序级别处理
配置改变。
|
二、使用
2.1 多进程下Application多次创建问题
通常会将一些初始化代码放在 Application 中,而每当运行指定了进程的组件时都会新建一个 Application 对象,由于不是同一个所以数据不通用,只需要在 Application 类中对当前进程加以判断即可。
override fun onCreate() {
super.onCreate()
if (isMainProcess()) init() //确保在主进程下才初始化(多进程会导致Application重复创建)
}
/**
* 当前进程是否为主进程
*/
private fun isMainProcess(): Boolean {
val activityManager = getSystemService(ACTIVITY_SERVICE) as ActivityManager
val runningProcesses = activityManager.runningAppProcesses
if (runningProcesses != null) {
for (process in runningProcesses) {
if (packageName.equals(process.processName)) {
return true
}
}
}
return false
}