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--------------------------