ComponentCallbacks2
是 Android 中的一个接口,用于接收内存相关的回调。它主要用于检测应用的内存使用情况,并在系统内存不足时释放不必要的资源。实现这个接口可以帮助应用在内存紧张时更好地管理资源。
以下是一个 Kotlin 示例代码,展示如何在 Activity
中实现 ComponentCallbacks2
接口,并处理内存紧张的情况:
import android.app.Activity
import android.content.ComponentCallbacks2
import android.content.res.Configuration
import android.os.Bundle
import android.util.Logclass MainActivity : Activity(), ComponentCallbacks2 {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 注册 ComponentCallbacks2 回调application.registerComponentCallbacks(this)}override fun onConfigurationChanged(newConfig: Configuration) {super.onConfigurationChanged(newConfig)// 配置改变时的处理,例如屏幕旋转}override fun onLowMemory() {super.onLowMemory()// 系统内存非常低时的处理Log.d("MainActivity", "onLowMemory: 系统内存非常低")// 在这里释放不必要的资源}override fun onTrimMemory(level: Int) {super.onTrimMemory(level)// 根据内存紧张的不同级别处理内存释放when (level) {ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN -> {// 应用的 UI 不再可见时的处理Log.d("MainActivity", "onTrimMemory: UI 不再可见")}ComponentCallbacks2.TRIM_MEMORY_RUNNING_MODERATE,ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW,ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL -> {// 应用正在运行但内存紧张时的处理Log.d("MainActivity", "onTrimMemory: 应用运行中,内存紧张")}ComponentCallbacks2.TRIM_MEMORY_BACKGROUND,ComponentCallbacks2.TRIM_MEMORY_MODERATE,ComponentCallbacks2.TRIM_MEMORY_COMPLETE -> {// 应用在后台时的处理Log.d("MainActivity", "onTrimMemory: 应用在后台")// 在这里释放不必要的资源}}}override fun onDestroy() {super.onDestroy()// 注销 ComponentCallbacks2 回调application.unregisterComponentCallbacks(this)}
}
关键点解释
-
注册和注销
ComponentCallbacks2
回调:- 在
onCreate()
方法中注册ComponentCallbacks2
回调。 - 在
onDestroy()
方法中注销ComponentCallbacks2
回调。
- 在
-
处理
onTrimMemory()
回调:TRIM_MEMORY_UI_HIDDEN
: 当应用的 UI 不再可见时触发。可以在这里释放与 UI 相关的资源。TRIM_MEMORY_RUNNING_MODERATE
,TRIM_MEMORY_RUNNING_LOW
,TRIM_MEMORY_RUNNING_CRITICAL
: 当应用正在运行但系统内存不足时触发。这些回调表示内存紧张的不同级别。TRIM_MEMORY_BACKGROUND
,TRIM_MEMORY_MODERATE
,TRIM_MEMORY_COMPLETE
: 当应用在后台时触发。这些回调表示应用在后台时的内存紧张级别。
-
处理
onLowMemory()
回调:- 当系统内存非常低时触发。可以在这里释放所有不必要的资源。
通过实现 ComponentCallbacks2
接口,应用可以在不同的内存紧张级别下做出响应,释放不必要的资源,从而改善应用的性能和用户体验。
在Service中也可以做这个事情,Service
中直接就有onLowMemory()
和onTrimMemory
方法,也可在Service
中去注册 ComponentCallbacks2
,特别是我们有一个长期在后台运行的Service
时需要检测一下内存低的情况。