android – Drawable vs单可重用位图更好的记忆?

据我所知(不是我是正确的)当应用程序完成它们时,通常可以从内存中正确地删除Drawable。位图但是需要手动回收,有时甚至有一个专门的类来处理它们。我的问题是,关于记忆和泄漏,简单地坚持像这样的Drawable是更有益的:

myView.setBackgroundDrawable(getResources().getDrawable(R.drawable.my_image));
myView1.setBackgroundDrawable(getResources().getDrawable(R.drawable.my_image1));
myView2.setBackgroundDrawable(getResources().getDrawable(R.drawable.my_image2));

而不是像Bitmaps那样的东西:

Bitmap tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
myView.setImageBitmap(tmpBitmap);

tmpBitmap.recycle();
tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image1);
myView1.setImageBitmap(tmpBitmap);

tmpBitmap.recycle();
tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image2);
myView2.setImageBitmap(tmpBitmap);
tmpBitmap.recycle();

我也读过当然,你必须小心在位图上的recycle()方法,因为它们可以在仍在使用中被删除?似乎这些问题以不同形式出现,但是我无法从任何人那里得到一个直接的答案。一个人说每次使用后重复使用Bitmap和回收,而其他人则说使用Drawable和unbindDrawables()方法(这是我一直在使用的):

private void unbindDrawables(View view) {
    if (view.getBackground() != null) {
        view.getBackground().setCallback(null);
    }
    if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
            unbindDrawables(((ViewGroup) view).getChildAt(i));
        }
        ((ViewGroup) view).removeAllViews();
    }
}

任何适用的洞察力都将不胜感激。谢谢

我回到罗曼的建议,但我不知道你的问题是在解决你的实际问题。我不知道你如何处理对你的意见的引用。也许您的应用程序内存泄漏? Android中的大量内存泄漏与上下文有关。当Drawable附加到View时,View将被设置为Drawable中的回调。

TextView myView = new TextView(this);
myView.setBackgroundDrawable(getDrawable(R.drawable.my_bitmap));

在上面的代码片段中,这意味着Drawable有一个对TextView的引用,它本身有一个对Activity(上下文)的引用,它根据你的代码又引用了很多东西。

没有看到更多的代码,我猜你在正确的轨道上,当Activity被销毁时,将存储的drawables的回调设置为null。

http://stackoverflow.com/questions/7044770/drawable-vs-single-reusable-bitmap-better-with-memory

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:android – Drawable vs单可重用位图更好的记忆?