如何在android中覆盖onTrimMemory

时间:2015-08-11 22:53:08

标签: android memory-management

android中的Application类提供了onTrimMemory和onLowMemory方法。我真的不理解它们(当然除了明显的语言意义)。我如何实现onTrimMemory方法?修剪记忆意味着什么?我显然正在寻找详细的技术答案。除了清空缓存(我应该这样做吗?),修剪似乎有更具体的意义。怎么在android中完成?这是OS的事吗?这是一个系统级的事情吗?我应该担心吗?我真的很想知道如何覆盖它。

1 个答案:

答案 0 :(得分:0)

  

修剪记忆是什么意思?

放开对象,这样它们就可以被垃圾收集。

  

除了清空缓存之外(我应该这样做吗?)

  

通过修剪似乎有更具体的意义

不是真的。 Android正在说"嘿,嗯,事情在系统内存上变得越来越紧张,你能否减少"对于较轻的水平,并且说" gee,这是一个非常好的过程,你来到这里 - 如果我们不得不终止它将是一个耻辱"对于更严重的病例。

请记住,对于Dalvik(我假设ART),垃圾收集实际上可以减少您的过程。工作集大小(例如,您正在使用的系统RAM的数量),通过减少堆使用量,您可以减少Android在后台运行时终止进程的可能性。

  

如何在android中完成?

放开对象,这样它们就可以被垃圾收集了。大多数情况下,这应该是指缓存。除此之外,根据业务规则,您应该放弃应用程序运行。因此,例如,当您可以终止onTrimMemory()中的后台线程时(因此放弃只能通过这些线程访问的任何对象),可能有更好/更早的时间点终止那些线程,如果它们没有添加任何值。

  

这是操作系统吗?

我不知道你认为是什么" OS的事情"是。

  

这是系统级别的事情吗?

我不知道你认为是什么"系统级的东西"是。

  

我应该担心吗?

如果您手动维护可能占用大量内存的缓存,理想情况下是。

如果您使用的是具有缓存的第三方库(例如图像加载库),请查看它们是否自己注册onTrimMemory()。如果没有,您可能会看到该库是否有一些API可以告诉它减少缓存,然后自己从onTrimMemory()调用它。

相关问题