一、概念
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
}
三、其它
3.1 getApplication() 和 getApplicationContext() 区别?
获得的对象相同,作用域不同(语义的区别,getApplication() 只在 Activity 和 Service 中有,在别的地方获取例如 BroadcastReceiver 中就要使用 getApplicationContext() 了)。getBaseContext() 获取的是 ContextImpl。
本文介绍了Android应用中关键生命周期方法如onCreate、onTerminate、onLowMemory等的使用场景,强调了在多进程中处理Application重复创建的问题,并提到了onTrimMemory和onConfigurationChanged的用途。
808

被折叠的 条评论
为什么被折叠?



