ComponentCallbacks和ComponentCallbacks2
参考
基本简介
ComponentCallbacks是一个接口。ComponentCallbacks2是一个继承自ComponentCallbacks的接口,主要用于Activity、Service、ContentProvider、Application等类中。四大组件中,除了Braodcast,另外三个均实现了ComponentCallbacks2接口。
实现了ComponentCallbacks接口的类有如下几个:
1 . Activity.java;
2 . Application.java;
3 . ContentProvider.java;
4 . Service.java;
5 . Fragment.java;
7 . VoiceInteractionSession.java;
ComponentCallbacks
public interface ComponentCallbacks {
void onConfigurationChanged(Configuration newConfig);
void onLowMemory();
}
ComponentCallbacks中只有两个方法。
- onConfigurationChanged():当设备配置发生改变时,而你的组件还在运行时,系统就会自动调用这个方法。
- onLowMemory():当整个系统运行的内存不足时,可以通过实现该方法去释放内存或不需要的资源。
ComponentCallbacks2
public interface ComponentCallbacks2 extends ComponentCallbacks {
static final int TRIM_MEMORY_COMPLETE = 80;
static final int TRIM_MEMORY_MODERATE = 60;
static final int TRIM_MEMORY_BACKGROUND = 40;
static final int TRIM_MEMORY_UI_HIDDEN = 20;
static final int TRIM_MEMORY_RUNNING_CRITICAL = 15;
static final int TRIM_MEMORY_RUNNING_LOW = 10;
static final int TRIM_MEMORY_RUNNING_MODERATE = 5;
void onTrimMemory(@TrimMemoryLevel int level);
}
ComponentCallbacks2继承自ComponentCallbacks回调接口,用以实现更细粒度的内存管理。我们可以实现onTrimMemory()方法,根据当前系统逐步释放内存。使用此回调方法可以来释放资源,有助于提供整体响应更快的系统,同时通过允许系统使我们的应用进程保持更长时间,直接有益于我们的应用程序的用户体验。如果我们不根据此回调定义的内存级别释放内存,系统更有可能在最近最少使用列表(LRU)中缓存进程时终止我们的进程。
ComponentCallbacks2中参数的的意义:
当开发者的应用正在运行
- TRIM_MEMORY_RUNNING_MODERATE:设备开始运行缓慢,当前应用正在运行,不会被kill;
- TRIM_MEMORY_RUNNING_LOW:设备运行更缓慢了,当前应用正在运行,不会被kill。但是请回收unused资源,以便提升系统的性能;
- TRIM_MEMORY_RUNNING_CRITICAL:设备运行特别慢,当前应用正在运行,但还不会被杀死。但是如果此应用没有释放资源,系统将会kill后台进程;
当开发者的应用的visibility发生改变
- TRIM_MEMORY_UI_HIDDEN:当前应用的UI不再可见,这是一个回收资源的好时机;
当开发者的应用进程被置于background LRU list
- TRIM_MEMORY_BACKGROUND:系统运行慢,并且进程运行于LRU list的上端。尽管应用不处于高风险被kill,但是当前应用应该释放那些容易恢复的资源;
- TRIM_MEMORY_MODERATE:系统运行缓慢,当前进程已经位于LRU list的中部,如果系统进一步变慢,便会有被kill的可能;
- TRIM_MEMORY_COMPLETE:系统运行慢,当前进程是第一批将被系统kill的进程。此应用应该释放一切可以释放的资源。低于api 14版本的,用户可以使用onLowMemory()回调。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
----------------------last line for now--------------------------