我有一个应用程序,大量使用从SD卡读入的位图。我99%肯定我的应用程序永远不会被销毁而不回收这些。它们都被分配到一个LRU缓存(commons-collections)中,当它们从LRU缓存中清除时回收它们,并且我在onDestroy()中回收它们。
尽管如此,我仍然有问题。如果我多次启动/停止/启动/ ...我的应用程序,我总是会出现内存错误。我的理论是它必须做w / android的非压缩堆。在多次运行之后,堆已经充分碎片化,因此尽管有足够的可用内存,但是没有足够大的连续块来加载位图。无论如何,这就是理论。
我通过在onDestroy()(android.os.Process.killProcess())中杀死我的进程来“解决”这个问题。这解决了这个问题,但是引入了自己的其他问题,因为我有其他需要完成的线程和服务,等待所有这些都很不实用。更不用说我当然明白这只是一个非常糟糕的做法。
我已阅读有关此主题的所有帖子等,但我看不到一个好的解决方案。我正在使用Thumbnails.getThumbnail(),所以我已经在使用缩小版本的图像了。对它们进行二次采样会导致图像质量非常差。
我正在保留8个“迷你”缩略图和36个“微”缩略图的缓存,所以我一次也没有比内存更多的东西。这些都应该最适合几个megs。
任何想法/提示/指示表示赞赏。我在这个问题上已经结束了。
答案 0 :(得分:2)
你说你在onDestroy()
中回收它们,但也许你应该在onPause()
中回收它们?在切换方向时我遇到了一些内存不足问题,并且通过在onPause()
中进行回收来解决问题。
只是一个想法。不确定这是否能解决您的问题。