gpt4 book ai didi

android - 存储多个位图时的性能问题

转载 作者:太空狗 更新时间:2023-10-29 15:09:48 27 4
gpt4 key购买 nike

我创建了一个自定义的 View 对象,它覆盖了 onDraw 方法来绘制一个相当复杂的 UI。我将这些自定义 View 中的 5 个添加到 LinearLayout 上,但在任何时候只有一个 View 可见

根据用户在我的应用程序中的操作,我正在切换每个应用程序的 View.Visibility 属性,以便只有一个可见。

澄清一下,我使用的方法对我有用,而且似乎 react 相当灵敏。我只是有点担心这种方法会如何影响低端或低规范设备。

这是我当前代码的示例:

自定义 View

public class MyDrawingView extends View {
private Bitmap mViewBitmap;

private int mWidth = 1024; // The width of the device screen
private int mHeight = 600; // Example value, this is dynamic

@Override
protected void onDraw(Canvas canvas) {
// Copy the in-memory bitmap to the canvas.
if(mViewBitmap != null) canvas.drawBitmap(mViewBitmap, 0, 0, mCanvasPaint);
}

private void drawMe() {
if(mViewBitmap == null) mViewBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(mViewBitmap);
c.drawBitmap(...);
c.drawText(...);
// Multiple different methods here drawing onto the canvas
c.save();
}
}

布局 XML

<LinearLayout>
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

问题

  1. 我是否应该始终在内存中保留这 5 个独立的 View 实例以及大小为 1024x600 的位图?
  2. 我是否应该合并这些功能,以便我只需将一个 View 添加到我的布局 XML,然后在每次需要更新 View 时重新生成一个位图?
  3. 请记住,由于位图的复杂性,重绘我的位图可能需要一些时间,哪个选项的性能更好?

文档

我已经阅读了关于 Managing Bitmap Memory 的 Android 文档,但是我觉得我已经实现了我的自定义 View 中概述的要点,但我认为它没有完全涵盖我的场景。

最佳答案

我不确定你为什么要放置一个 LinearLayout,其中的 View 具有设备大小,然后相应地隐藏。你最好使用 ViewFlipper甚至更好 ViewPager .

最好的一个是 ViewPager,因为那时您可以在不可见时从内存中释放位图。

此外,如果您从互联网或 SD 卡加载图像,您可以使用 Universal Image Loader ,它为您简化了缓存和内存管理。无需重新发明轮子:)

关于android - 存储多个位图时的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17882987/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com