public interface ComponentCallbacks2
implements ComponentCallbacks
android.content.ComponentCallbacks2 |
Known Indirect Subclasses |
扩展ComponentCallbacks
接口,使用新的回调进行更细粒度的内存管理。 这个接口是所有应用程序组件(可Activity
, Service
, ContentProvider
,并Application
)。
您应该实现onTrimMemory(int)
以基于当前系统约束增量释放内存。 使用此回调释放资源有助于提供更全面的响应式系统,但也可让系统保持您的流程长久存活,从而直接为您的应用提供用户体验。 也就是说,如果您没有根据此回调定义的内存级别来裁减资源,那么当系统缓存在最近最少使用(LRU)列表中时,系统更可能会终止进程,因此需要重新启动应用程序并在用户返回时恢复所有状态。
由 onTrimMemory(int)
提供的值不代表内存限制的单个线性级数,而是为您提供有关内存可用性的不同类型的线索:
TRIM_MEMORY_RUNNING_MODERATE
TRIM_MEMORY_RUNNING_LOW
TRIM_MEMORY_RUNNING_CRITICAL
TRIM_MEMORY_UI_HIDDEN
TRIM_MEMORY_BACKGROUND
TRIM_MEMORY_MODERATE
TRIM_MEMORY_COMPLETE
要支持低于14的API级别,可以使用 onLowMemory()
方法作为与 TRIM_MEMORY_COMPLETE
级别大致相当的后备方法。
注意:当系统开始在LRU列表中查杀进程时,虽然它主要是自下而上的,但它确实考虑了哪些进程消耗了更多的内存,并因此在内存中提供了更多的增益。 因此,在整个LRU列表中消耗的内存越少,留在列表中的机会就越好,并且能够快速恢复。
有关流程生命周期不同阶段的更多信息(例如,它意味着放置在后台LRU列表中)在 Processes and Threads文档中提供。
Constants |
|
---|---|
int |
TRIM_MEMORY_BACKGROUND 级别为 |
int |
TRIM_MEMORY_COMPLETE 级别为 |
int |
TRIM_MEMORY_MODERATE 级别为 |
int |
TRIM_MEMORY_RUNNING_CRITICAL 级别为 |
int |
TRIM_MEMORY_RUNNING_LOW 级别为 |
int |
TRIM_MEMORY_RUNNING_MODERATE
|
int |
TRIM_MEMORY_UI_HIDDEN 级别为 |
Public methods |
|
---|---|
abstract void |
onTrimMemory(int level) 当操作系统确定进程从其进程中删除不需要的内存是一个好时机时调用。 |
Inherited methods |
|
---|---|
From interface android.content.ComponentCallbacks
|
int TRIM_MEMORY_BACKGROUND
级别为onTrimMemory(int)
:进程已经进入LRU列表。 如果用户返回到应用程序,这是一个很好的机会来清理可以高效快速重新构建的资源。
常量值:40(0x00000028)
int TRIM_MEMORY_COMPLETE
级别为 onTrimMemory(int)
:进程接近后台LRU列表的末尾,并且如果没有找到更多内存,它将被终止。
常数值:80(0x00000050)
int TRIM_MEMORY_MODERATE
级别为onTrimMemory(int)
:进程位于后台LRU列表的中间; 释放内存可以帮助系统保留列表中稍后运行的其他进程,以获得更好的整体性能。
常量值:60(0x0000003c)
int TRIM_MEMORY_RUNNING_CRITICAL
级别为onTrimMemory(int)
:该进程不是一个onTrimMemory(int)
后台进程,但该设备运行内存非常低,并且将不能保持任何后台进程运行。 正在运行的进程应释放尽可能多的非关键资源,因为它可以允许在其他地方使用该内存。 在此之后发生的下一件事情是调用onLowMemory()
报告没有任何东西可以保留在后台,这种情况可能开始对用户产生显着影响。
常量值:15(0x0000000f)
int TRIM_MEMORY_RUNNING_LOW
onTrimMemory(int)
等级:该过程不是可消耗的后台过程,但设备内存不足。 正在运行的进程应该释放不需要的资源以允许其他地方使用该内存。
常量值:10(0x0000000a)
int TRIM_MEMORY_RUNNING_MODERATE
级别为onTrimMemory(int)
:该过程不是可消耗的后台进程,但该设备在内存上的运行状况适中。 您正在运行的进程可能希望释放一些不需要的资源以供其他地方使用。
常量值:5(0x00000005)
int TRIM_MEMORY_UI_HIDDEN
级别为onTrimMemory(int)
:该进程已显示用户界面,并且不再这样做。 此时应该释放大量的用户界面分配,以便更好地管理内存。
常量值:20(0x00000014)
void onTrimMemory (int level)
当操作系统确定进程从其进程中删除不需要的内存是一个好时机时调用。 例如,当它进入后台并且没有足够的内存来保持尽可能多的后台进程运行时,会发生这种情况。 您不应该与级别的确切值进行比较,因为可能会添加新的中间值 - 如果值大于或等于您感兴趣的级别,通常需要比较。
要在任何点检索处理当前的修剪水平,可以使用 ActivityManager.getMyMemoryState(RunningAppProcessInfo)
。
Parameters | |
---|---|
level |
int : The context of the trim, giving a hint of the amount of trimming the application may like to perform. May be TRIM_MEMORY_COMPLETE , TRIM_MEMORY_MODERATE , TRIM_MEMORY_BACKGROUND , TRIM_MEMORY_UI_HIDDEN , TRIM_MEMORY_RUNNING_CRITICAL , TRIM_MEMORY_RUNNING_LOW , or TRIM_MEMORY_RUNNING_MODERATE . |