天天看点

Android OnLowMemory和OnTrimMemory

1.onlowmemory

是android提供的api,在系统内存不足,所有后台程序(优先级为background的进程,不是指后台运行的进程)都被杀死时,系统会调用onlowmemory。

系统提供的回调有:application/activity/fragementice/service/contentprovider

2.ontrimmemory

       ontrimmemory是android 4.0之后提供的api,系统会根据不同的内存状态来回调。系统提供的回调有:application/activity/fragement/service/contentprovider

 ontrimmemory的参数是一个int数值,代表不同的内存状态:

trim_memory_complete:内存不足,并且该进程在后台进程列表最后一个,马上就要被清理

trim_memory_moderate:内存不足,并且该进程在后台进程列表的中部。

trim_memory_background:内存不足,并且该进程是后台进程。

trim_memory_ui_hidden:内存不足,并且该进程的ui已经不可见了。 

 以上4个是4.0增加

trim_memory_running_critical:内存不足(后台进程不足3个),并且该进程优先级比较高,需要清理内存

trim_memory_running_low:内存不足(后台进程不足5个),并且该进程优先级比较高,需要清理内存

trim_memory_running_moderate:内存不足(后台进程超过5个),并且该进程优先级比较高,需要清理内存  

系统也提供了一个componentcallbacks2,通过context.registercomponentcallbacks()注册后,就会被系统回调到。

onlowmemory和ontrimmemory的比较

1,onlowmemory被回调时,已经没有后台进程;而ontrimmemory被回调时,还有后台进程。

2,onlowmemory是在最后一个后台进程被杀时调用,一般情况是low memory killer 杀进程后触发;而ontrimmemory的触发更频繁,每次计算进程优先级时,只要满足条件,都会触发。

3,通过一键清理后,onlowmemory不会被触发,而ontrimmemory会被触发一次。

继续阅读