处理许多全屏png以避免OOM

烈士

我有一个应用程序可以与arduino通信。有自定义形状的按钮,因此我将它们以PNG绘制为单个背景,并添加Buttonsandroid:background="@android:color/transparent"使它们在几乎自定义按钮大小的顶部透明的按钮。

在此处输入图片说明

在此图像中,您可以看到:1.背景-黑色背景,深蓝色按钮绘制为单个png。2.橙色png-与背景大小相同,并带有match parrent选项进行绘制3.隐形按钮-具有透明选项,蓝色正方形,共有7个。

为了消除指示图像的错位,我在PNG透明背景中绘制了相同大小的背景。我加入他们res/drawable,并在布局XML作为ImageViewandroid:visibility="gone",布局FrameLayout为了表明该按钮已被按下,我将设置VISIBLE橙色的自定义按钮,当arduino打开输出时,会发送回确认信息,使我消失并设置另一个PNG可见。它消耗大量内存。图像尺寸为1478x2623。在最坏的情况下,我必须一次只显示8张图像+永久背景。在onCreate方法中,我加载了所有17张图像。

为了避免OOM-内存不足错误,我必须调整图像大小,这使我看起来很糟糕...

如果图像在XML中的可见性为android:visibility="gone",是否将图像加载到onCreate中?如果是这样,我应该创建,缩放它,并仅在需要时绘制。如何实现呢?

编辑

进行了一些更改。

  1. 图片缩小至1920x1080
  2. 8布局和资源上剩下的ImageView是在方法中设置的,而不是在XML中设置的

这些更改使它变得更快,并且不再出现OOM错误。目前我很忙,因此需要一些时间来测试答案中建议的方法。我会尽快尝试。

为什么您的图片这么大?该分辨率(1478x2623)很大,将8保留在内存中确实会导致OOM异常。

如果确实需要,则可以执行以下任一操作:

  1. 便宜又讨厌的解决方案:使用大内存堆。由于此应用是供您个人使用的,因此这可能是最快的选择,并且可以与清单中的一行更改一起使用,但是除非有真正的理由为什么它需要更多的内存,否则我不建议您将其用于一般应用。(要实现此目的,请参阅:如何增加android应用程序的堆大小?
  2. 使用UniversalImageLoadr(https://github.com/nostra13/Android-Universal-Image-Loader)并确保您不会一次加载所有图像。例如,仅当且仅当需要显示图像叠加层时,才加载图像叠加层。为此,您可以在需要时设置图像源,并将不可见图像的图像源设置为null。此外,请确保回收未在使用中的位图。图像加载器库已经在处理其中的大部分内容。
  3. (我认为将其与2一起使用):您确实不需要您指定的分辨率。它太大了。您应该查看Android准则(http://developer.android.com/training/displaying-bitmaps/index.html),或者使用图像加载器并指定较小的尺寸并按比例缩放图像。

要回答您的确切问题:如果XML中图像的可见性是android:visibility =“ gone”,是否将图像加载到onCreate中?如果是这样,我应该创建,缩放它,并仅在需要时绘制。如何实现呢?

是的,它仍然会加载图像,因为它需要立即显示它,并且是的,只有在需要时才应解码位图。有关如何实现的信息,请参见上面的第2点和第3点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

处理许多全屏png以避免OOM

来自分类Dev

执行许多模拟以避免循环

来自分类Dev

处理数组以避免错误

来自分类Dev

NodeJs / Express:避免顺序处理许多文件

来自分类Dev

下载图像并调整大小以避免OOM错误,Picasso fit()会使图像失真

来自分类Dev

如何处理WM_ERASEBKGND以避免闪烁?

来自分类Dev

处理程序中的Golang抽象,以避免代码重复

来自分类Dev

发送HTTP 1.0请求以避免处理块

来自分类Dev

处理选择+插入以避免重复错误的正确方法

来自分类Dev

触发以避免冲突

来自分类Dev

在tsql中使用布尔代数以避免CASE语句或处理复杂的WHERE条件

来自分类Dev

在闭包中正确处理维护的引用,以避免内存泄漏

来自分类Dev

路由更改时,可以避免重新渲染父路由处理程序组件吗?

来自分类Dev

可以避免在哈希图中进行重新哈希处理吗?

来自分类Dev

如何处理巨大的numpy数组上的计算以避免内存分配错误?

来自分类Dev

预处理值(以度为单位)以进行回归以避免不连续

来自分类Dev

不支持字体时,如何制作异常处理程序以避免挂起系统?

来自分类Dev

正确处理闭包中维护的引用,以避免内存泄漏

来自分类Dev

路由更改时,是否可以避免重新渲染父路由处理程序组件?

来自分类Dev

如何处理按键操作以避免删除输入文本字段数据

来自分类Dev

如何以设置的间隔处理卸载组件以避免内存泄漏

来自分类Dev

如何处理 <DataColumn> Widget 的动态列表以避免 Flutter DataTable Widget 中的 RenderFlex 异常?

来自分类Dev

如何在 Swagger 中处理非必需参数以避免丢失位置参数错误?

来自分类Dev

代码优化以避免分支

来自分类Dev

htaccess编辑以避免重复

来自分类Dev

Get()模式以避免nullPointerException

来自分类Dev

htaccess编辑以避免重复

来自分类Dev

组织表以避免冗余

来自分类Dev

添加滚动以避免重叠

Related 相关文章

  1. 1

    处理许多全屏png以避免OOM

  2. 2

    执行许多模拟以避免循环

  3. 3

    处理数组以避免错误

  4. 4

    NodeJs / Express:避免顺序处理许多文件

  5. 5

    下载图像并调整大小以避免OOM错误,Picasso fit()会使图像失真

  6. 6

    如何处理WM_ERASEBKGND以避免闪烁?

  7. 7

    处理程序中的Golang抽象,以避免代码重复

  8. 8

    发送HTTP 1.0请求以避免处理块

  9. 9

    处理选择+插入以避免重复错误的正确方法

  10. 10

    触发以避免冲突

  11. 11

    在tsql中使用布尔代数以避免CASE语句或处理复杂的WHERE条件

  12. 12

    在闭包中正确处理维护的引用,以避免内存泄漏

  13. 13

    路由更改时,可以避免重新渲染父路由处理程序组件吗?

  14. 14

    可以避免在哈希图中进行重新哈希处理吗?

  15. 15

    如何处理巨大的numpy数组上的计算以避免内存分配错误?

  16. 16

    预处理值(以度为单位)以进行回归以避免不连续

  17. 17

    不支持字体时,如何制作异常处理程序以避免挂起系统?

  18. 18

    正确处理闭包中维护的引用,以避免内存泄漏

  19. 19

    路由更改时,是否可以避免重新渲染父路由处理程序组件?

  20. 20

    如何处理按键操作以避免删除输入文本字段数据

  21. 21

    如何以设置的间隔处理卸载组件以避免内存泄漏

  22. 22

    如何处理 <DataColumn> Widget 的动态列表以避免 Flutter DataTable Widget 中的 RenderFlex 异常?

  23. 23

    如何在 Swagger 中处理非必需参数以避免丢失位置参数错误?

  24. 24

    代码优化以避免分支

  25. 25

    htaccess编辑以避免重复

  26. 26

    Get()模式以避免nullPointerException

  27. 27

    htaccess编辑以避免重复

  28. 28

    组织表以避免冗余

  29. 29

    添加滚动以避免重叠

热门标签

归档