【问题标题】:how do I override onTrimMemory in android如何在android中覆盖onTrimMemory
【发布时间】:2015-11-04 08:38:50
【问题描述】:

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

【问题讨论】:

标签: android memory-management


【解决方案1】:

修剪内存是什么意思?

释放对象,以便它们可以被垃圾回收。

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

是的。

修剪似乎有更具体的含义

不是真的。 Android 说“嘿,嗯,系统 RAM 上的东西越来越紧,你能不能削减一下”以获得更轻的水平,并说“哎呀,这是一个非常好的过程 - 如果我们对于更严重的情况,必须终止它。

请记住,使用 Dalvik(我假设是 ART),垃圾收集实际上可以减少进程的工作集大小(也就是您正在使用的系统 RAM 量),因此通过减少堆使用量,您可以做到当您在后台时,Android 终止您的进程的可能性要小一些。

在android中是怎么做到的?

释放对象,以便它们可以被垃圾收集。大多数情况下,这应该是指缓存。其他任何事情,您都应该根据业务规则在您的应用程序运行时放手。因此,例如,虽然您可以终止 onTrimMemory() 中的后台线程(因此放弃只能通过这些线程访问的任何对象),但可能有更好/更早的时间点来终止这些线程,如果他们没有增加任何价值。

这是操作系统的问题吗?

我不知道你认为“操作系统的东西”是什么。

这是系统级别的事情吗?

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

我应该担心吗?

如果您手动维护可能会消耗大量内存的缓存,最好是这样。

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

【讨论】:

    猜你喜欢
    • 2017-08-16
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多