需要帮助管理内存
Need Help Managing Memory
我的应用程序的一个主要问题是崩溃,由于我的应用程序包含大量内容(它是一个内容共享站点客户端),这种情况经常发生。我遇到很多内存错误,我最多可以使用 170-180 MB 的内存,这太荒谬了。
http://i.gyazo.com/6cd53e6cf6f0a9bfdd6a24b323a70b09.gif http://gyazo.com/b64d50f76b2ef608954a6d6cdd5d52d0
这些屏幕截图来自加载 25 个提交并滚动浏览它们。
我当前的设置是这样的:LruCache 大小为
(Runtime.getRuntime().maxMemory() / 1024) / 8
处理所有提交的图像。当我加载提交的照片或缩略图时,它会进入该缓存。相册由用于位图的简单 ArrayAdapter 和 WeakHashMap 存储处理,因为它很少被调用(可能每 25-30 个帖子中就有 1 个包含相册)。 Gif 文件通过 GfyCat 流式传输到 VideoView,gif 文件或相册不会发生真正的崩溃。真正的错误发生在我滚动时,这很奇怪,因为我一次将图像全部加载到 LruCache 以节省移动无线电时间(电池改进)。
问题似乎是 android 试图将更多的东西放入 LruCache 中,因为我得到了这样的错误
java.lang.OutOfMemoryError: Failed to allocate a 3169972 byte allocation with 1400991 free bytes and 1368KB until OOM
尽管我的 LruCache 大小是 24576kb。
我是否正确处理内存?我可以采取哪些步骤来提高稳定性,同时保持应用程序的快速运行?
谢谢!
我最终从 Ion 图像加载库切换到 Picasso,并且通过自动缓存节省了 33% 的内存使用量,所以我摆脱了 LruCache 和我所有的商店,现在它比以往任何时候都运行得更好!
您甚至可以使用此配置进一步增强 picasso
Picasso.with(this)
.load(YOUR_URL)
.config(Bitmap.Config.RGB_565).fit()
.into((ImageView) findViewById(
R.id.frame_main_main_layout));
它将减少分配内存并提高性能
我的应用程序的一个主要问题是崩溃,由于我的应用程序包含大量内容(它是一个内容共享站点客户端),这种情况经常发生。我遇到很多内存错误,我最多可以使用 170-180 MB 的内存,这太荒谬了。
http://i.gyazo.com/6cd53e6cf6f0a9bfdd6a24b323a70b09.gif http://gyazo.com/b64d50f76b2ef608954a6d6cdd5d52d0
这些屏幕截图来自加载 25 个提交并滚动浏览它们。
我当前的设置是这样的:LruCache 大小为
(Runtime.getRuntime().maxMemory() / 1024) / 8
处理所有提交的图像。当我加载提交的照片或缩略图时,它会进入该缓存。相册由用于位图的简单 ArrayAdapter 和 WeakHashMap 存储处理,因为它很少被调用(可能每 25-30 个帖子中就有 1 个包含相册)。 Gif 文件通过 GfyCat 流式传输到 VideoView,gif 文件或相册不会发生真正的崩溃。真正的错误发生在我滚动时,这很奇怪,因为我一次将图像全部加载到 LruCache 以节省移动无线电时间(电池改进)。
问题似乎是 android 试图将更多的东西放入 LruCache 中,因为我得到了这样的错误
java.lang.OutOfMemoryError: Failed to allocate a 3169972 byte allocation with 1400991 free bytes and 1368KB until OOM
尽管我的 LruCache 大小是 24576kb。
我是否正确处理内存?我可以采取哪些步骤来提高稳定性,同时保持应用程序的快速运行? 谢谢!
我最终从 Ion 图像加载库切换到 Picasso,并且通过自动缓存节省了 33% 的内存使用量,所以我摆脱了 LruCache 和我所有的商店,现在它比以往任何时候都运行得更好!
您甚至可以使用此配置进一步增强 picasso
Picasso.with(this)
.load(YOUR_URL)
.config(Bitmap.Config.RGB_565).fit()
.into((ImageView) findViewById(
R.id.frame_main_main_layout));
它将减少分配内存并提高性能