我最近在Managing Your App's Memory上阅读了这篇文章,强烈建议您阅读,如果您是AndroidDev且从未使用过。

有很多好的做法,我从未碰过的一件事是系统在每个Activity/Fragment上调用onTrimMemory(int level)方法,以通知应该或应该释放内存的事件。

这是该文章的引文:



我真的很想在我的应用程序中实现良好的内存管理,因此我期待以正确的方式实现onTrimMemory()

我对此只有几个问题:

  • 是在onStop()之后立即调用的onTrimMemory(TRIM_MEMORY_UI_HIDDEN)吗?
  • 在这种情况下,“释放UI资源”是什么意思?仅用于清理位图缓存,还是实际上删除并销毁 View 树中的每个 View ?我通常会在onDestroy()或onDestroyView()方法中破坏 View ,我现在想知道自己是否做对了。
  • 是否存在onTrimMemory(TRIM_MEMORY_UI_HIDDEN)的双/通讯回叫?例如onCreate-onDestroy,onStart-onStop,onCreateView-onDestroyView。我要求了解在调用onTrimMemory(TRIM_MEMORY_UI_HIDDEN)后在前台显示的Activity/Fragment后应该在哪里以及如何还原UI状态。
  • 最佳答案

    实际上在onStop之前调用了具有TRIM_MEMORY_UI_HIDDEN级别的

  • onTrimMemory。调用onStop时,这意味着该 Activity 实际上正在停止,并且如果需要,Android OS可能会立即将其杀死,因此,除了onRestart有时是onDestroy之外,您不应该再期望对该 Activity 的回调进行更多的调用。
  • “释放您的UI资源”实际上是关于诸如缓存之类的事情。通常,您不必担心管理 View 或UI组件,因为操作系统已经这样做了,这就是为什么要使用所有这些回调来创建,开始,暂停,停止和销毁 Activity 的原因。但是,有时要提高性能,就必须增加内存使用率,例如缓存 Activity 使用的某些数据。这是在调用onTrimMemory时应释放的资源类型,因此,即使它影响性能,您的应用程序也会使用更少的内存。但是,您应该担心内存泄漏。如果您的 Activity 停止,请确保不要保留对其 View 的任何引用,因为这将使该 Activity 不会被垃圾收集,这将使整个上下文无法被收集,这很糟糕,主要是在您希望保持应用程序运行的情况下数小时或数天(例如实现服务时)。
  • 不,没有对应的onTrimMemory回调。但是,您不需要一个。如前所述,如果保留一些资源的缓存以提高性能,则将其清空,并在需要时让它再次增长。如果内存水平保持较低,则可能会很快以相同的内存水平再次调用onTrimMemory。顺便说一句,请记住,将使用几种不同的内存级别(不仅是TRIM_MEMORY_UI_HIDDEN)来调用onTrimMemory。
  • 关于android - 了解onTrimMemory(int level),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19398827/

    10-08 21:18