android - 将可绘制对象放在彼此的前面会导致使用的内存显着增加

标签 android performance android-layout memory memory-management

我的应用程序通常占用的内存约为 20MB。但是,当我将一个可绘制对象放在另一个前面时(为了使每个单独的元素都具有动画效果)...

enter image description here

这张图片中实际上有两个 drawable:绿色底座和图钉(带有阴影)

...我的内存使用量增加了 ~40MB!布局使用 xhdpi 可绘制对象,总共约有 2.1MB。这些可绘制对象的布局是:

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1.2">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/serbia"
            android:src="@drawable/serbia"
            android:adjustViewBounds="true" />

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/pin"
            android:src="@drawable/pin"
            android:adjustViewBounds="true"/>

    </RelativeLayout>

是什么导致内存突然增加?有没有办法绕过这种做法,但仍然能够分别为图像的每个部分制作动画?

请注意,我仍然需要正确对齐这些元素(图钉不在布局的中心),因为阴影的右边缘被裁剪为底部的形状)

最佳答案

图钉和阴影可能很小,但 View 大小与布局它们时的父 View 大小相同,因此较大的 View (父 View )设置所有三个缓冲区的大小以进行绘制。所以最大的尺寸乘以 3(或四,我不知道容器实际上是如何绘制自己的)是使用的内存。我所说的最大是指屏幕格式中的最大,而不是压缩文件中的最大。

最好的办法是自己绘制它们或使用 FrameLayout 将它们堆叠起来,然后设置 x 和 y 位置...如果您可以直接在 xml 中设置 thrm,请立即不要,但如果不能,请将它们设置在别处的代码。

关于android - 将可绘制对象放在彼此的前面会导致使用的内存显着增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30922673/

相关文章:

android - Android 6.0 中如何创建Http Request

android - 在 Android 12 上安装 Flutter 应用发布版本时出错 : "Parse Error : There was a problem parsing the package"

java - 透明 Activity 内容与父级不匹配

performance - Scala集合转换性能: single looping vs.多重循环

java - 从 ListActivity 条目启动 Intent - Android

android - 如何让 textview 从 26% 的屏幕开始一直到 96% 的屏幕?

android - Cordova 自动更新应用文件夹

java - Android - 将自定义 XML 文件格式解析为字符串

performance - 为什么 Haskell 的 'even' 函数会减慢我的程序速度?

java - 如何使用 Zstd-jni 和字节缓冲区解压缩大文件