gpt4 book ai didi

android - 如何从 Android 中的内存中释放(强制,如有必要)9-patch (NinePatchDrawable)?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:46:50 32 4
gpt4 key购买 nike

如何强制 NinePatchDrawable 释放它从“res”中解析出的位图字节?


作为一名 Android 开发者,我面临着控制游戏内存使用的压力。

我努力通过在不再使用资源后尽快释放资源来控制内存利用率。为此,我维护了一个所有已加载资源的列表,并在处理完后立即从内存中清除/释放它们。

我的应用程序使用了许多不同类型的图形资源

  • 位图
  • BitMapDrawable
  • 可绘制
  • NinePatchDrawable

如何立即释放这些对象?

  • BitMap:我使用“recycle()”方法
  • BitMapDrawable:我使用“getBitMap().recycle()”方法
  • Drawable:我将它们设置为 null(不工作)
  • NinePatchDrawable:我将它们设置为空(不工作)

你试过什么?

  • 你不能“getBitmap()”一个 NinePatchDrawable
  • 您不能将 NinePatchDrawable 转换为 BitMapDrawable(即使它们都是基于位图的 Drawable)
  • 似乎有一种方法可以自己解析 PNG,自己将字节送入 NinePathDrawable——这可能会让我自己“回收()”底层 BitMap,但这似乎我m 重新发明轮子 ( http://code.google.com/p/android/issues/detail?id=13542 )

我当前的规则:

  • 永远不要在 XML 中使用@drawable/
  • 从不在 XML 中使用 android:background
  • 从不在 XML 中使用 android:src

最佳答案

为了能够在 xml 中使用:@drawable/、android:background、android:src,您始终可以使用自定义类。

所以不是 <ImageView android:src="@drawable/bg" />您可以使用: <com.myPackage.CustomImageView android:src="@drawable/bg" />

在构造函数中的 CustomImageView 中,您可以获得对 xml 属性的引用:

    
private Drawable bg2;
private Drawable bg1;
public void CustomImageView(Context context, Attrs attrs)
{
super(context, attrs);

// Use this to get references to your xml attributes
int resourceId = attrs.getAttributeResourceValue("android", "src", 0);
bg1 = getResources().getDrawable(resourceId);

// Or for the 'background' attribute
resourceid = attrs.getAttributeResourceValue("android", "background", 0);
bg2 = getResources().getDrawable(resourceId);

// Now you can recycle() your 'bg' whenever you're done
}

这样,您就可以从 xml 中提取引用。并在您认为合适的时候回收()它们

关于android - 如何从 Android 中的内存中释放(强制,如有必要)9-patch (NinePatchDrawable)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6334439/

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