为了账号安全,请及时绑定邮箱和手机立即绑定

Android中的位图

Android中的位图

波斯汪 2019-12-21 13:18:50
我对位图对象和内存及其一般分类法有一些疑问。什么是内存或本机位图?位图内存与堆内存有何不同?
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

通过野外部署,我发现了以下设备:

  • 限制为16 MiB的设备(Java堆+本机位图存储)

  • 限制为24 MiB的设备(Java堆+本机位图存储)

24 MiB往往是高分辨率设备,可以使用Runtime.getRuntime()。maxMemory()进行检测。现在也有32MiB设备,并且某些植根电话默认情况下具有64MiB。以前,我几次试图弄清楚自己发生的事情时都感到困惑。我认为所有设备都将位图计入堆限制。但是,很难对android机群进行全面的概括。

这是Android上的一个非常讨厌的问题,非常令人困惑。此限制及其行为的文献记载不充分,复杂且极其不直观。它们还因设备和操作系统版本而异,并具有几个已知的错误。问题的部分原因在于限制不精确-由于堆碎片,您将在实际限制之前达到OOM,并且必须保守地保留一两个meg缓冲区。更糟糕的是,我有几台设备在发生Java OOM异常之前就发生了本机段错误(Android本身是100%的错误),因此永远都无法达到极限变得非常重要,因为您甚至无法捕获本机崩溃。有关我的调查的更多详细信息,请查看这篇文章。在同一篇文章中,我解释了如何根据限制衡量使用情况并避免崩溃。

Java堆的大小为Runtime.getRuntime()。totalMemory()。

没有简单的方法可以测量本机位图存储的大小。可以使用Debug.getNativeHeapAllocatedSize()来衡量整个本机堆,但是只有位图会计入限制(我认为)。


查看完整回答
反对 回复 2019-12-21
  • 3 回答
  • 0 关注
  • 460 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信