当前位置: 首页 > 知识库问答 >
问题:

Android-设备内存的位图问题

叶鸿煊
2023-03-14

我使用位图在同一画布上绘制多个图形。比如说,我在同一块画布上画不同半径的线和圆。我的要求是在MapView中添加2000个这样的画布。如果我使用256x256作为位图分辨率,图像看起来是像素化的。

所以我使用1024x1024作为位图分辨率,以获得更好的质量。现在,当我在内存不足的Android设备上运行它时,我的应用程序冻结并崩溃。

问题陈述:

>

  • 位图大小- 1024*1024=在具有更多内存的设备(如一加设备)中正常工作,但在低存储空间[小于4 GB]时会冻结

    位图大小- 256 * 256=适用于两个Android设备。

    下面是当前用于使用位图在画布上绘制的代码段。

    Bitmap bitmap = Bitmap.createBitmap(1024, 1024, Bitmap.Config.ARGB_8888);
    
    Canvas canvas = new Canvas(bitmap);
    

    //绘图圆

     canvas.drawCircle(width/2, height/2, 2, paint);
    

    //画线

    canvas.drawLine(cx, cy, x2, y2, paint);
    

    //相同的画布,不同的半径

    canvas.drawArc(endgunRect, startAngle - 90, endSweep, false, paint);
    

    预期解决方案:无论设备存储容量如何,我需要在所有类型的Android设备的应用程序地图视图上加载大约2000个设备?

    有谁能告诉我们除了画布上的位图还有什么其他方法吗?

  • 共有1个答案

    谷弘致
    2023-03-14

    位图存储在位图堆中,位图堆位于Dalvik堆中,当大量使用时,通常会导致内存问题。我也遇到了类似的问题,为了确保设备永远不会耗尽内存,您可以使用几点。

    1. 尽量减小位图的大小,或根据设备大小使其动态
     类似资料:
    • 我在继续我的游戏超过8次后,我得到了OutOfMemory错误,因为堆逐渐填充。在使用MAT分析我的游戏堆时,我知道以下2个原因: 关键词Android.Graphics.Bitmap Byte[] 关键词java.lang.Object[]Android.content.res.resources 请提出解决方案

    • 在上一章我们了解到Windows GDI位图对象(也称为与设备相关的位图,或DDB)有许多程序设计用途。但是我并没有展示把这些位图储存到磁盘文件或把它们加载内存的方法。这是以前在Windows中使用的方法,现在根本不用了。因为位图的位格式相当依赖于设备,所以DDB不适用于图像交换。DDB内没有色彩对照表来指定位图的位与色彩之间的联系。DDB只有在Windows开机到关机的生命期内被建立和清除时才有

    • 问题内容: 我是所有内存管理主题的新手,所以有很多我不了解的事情。 我正在尝试将图像缓存在我的应用程序中,但是我在内存消耗方面遇到了麻烦: 所有的Bitmap Chaching代码都可以从此处复制粘贴:http : //developer.android.com/training/displaying- bitmaps/index.html 我调试了代码,并在Eclipse的DDMS视图中检查了堆

    • 问题内容: 我正在使用位图。它抛出内存不足错误(5次中的2次)。如何避免。 以下是我的代码 : 问题答案: 你得到的OutOfMemoryError因为你没有 那些你用 尝试那些你使用它们后

    • 我想创造一种方法,让用户与前面或后面的手机进行通信。虽然这不能用全球定位系统来实现,但我希望使用蓝牙来实现这一效果。我知道有算法可以根据蓝牙信号强度看到一个设备离另一个设备有多远,但我没有看到任何关于给出位置方向的东西。我已经研究了使用uwb信号跟踪用户的其他方法,但还没有能够得到一些可以给出位置方向的东西。

    • DIB(Device-indepentent bitmap)的与设备无关性主要体现在以下两个方面: DIB的颜色模式与设备无关。例如,一个256色的DIB即可以在真彩色显示模式下使用,也可以在16色模式下使用。 256色以下(包括256色)的DIB拥有自己的颜色表,像素的颜色独立于系统调色板。   由于DIB不依赖于具体设备,因此可以用来永久性地保存图象。DIB一般是以*.BMP文件的形式保存在磁