Java 内存与性能,哪一个最好?

Java 内存与性能,哪一个最好?,java,android,performance,memory,bitmap,Java,Android,Performance,Memory,Bitmap,我需要采取一个图像,规模,遮罩它,添加一个背景的情况下,一些是透明的,然后添加一个覆盖图像。为此,我写了以下内容: Canvas canvas = new Canvas(); Bitmap mainImage = Bitmap.createScaledBitmap(((BitmapDrawable)d).getBitmap(), iconSize, iconSize, false); Bitmap result = Bitmap.createBitmap(iconSize, iconSize,

我需要采取一个图像,规模,遮罩它,添加一个背景的情况下,一些是透明的,然后添加一个覆盖图像。为此,我写了以下内容:

Canvas canvas = new Canvas();
Bitmap mainImage = Bitmap.createScaledBitmap(((BitmapDrawable)d).getBitmap(), iconSize, iconSize, false);
Bitmap result = Bitmap.createBitmap(iconSize, iconSize, Bitmap.Config.ARGB_8888);

canvas.setBitmap(result);
Paint paint = new Paint();
paint.setFilterBitmap(false);

Bitmap mask = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(context.res, context.mask_bg)
                    , iconSize, iconSize, false);
                        canvas.drawBitmap(mask, 0, 0, paint);
canvas.drawBitmap(mainImage, 0, 0, paint);

mask = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(context.res, context.mask)
                    , iconSize, iconSize, false);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawBitmap(mask, 0, 0, paint);

mask = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(context.res, context.mask_frame)
                    , iconSize, iconSize, false);
paint.setXfermode(null);
canvas.drawBitmap(mask, 0, 0, paint);
现在,这个操作将在我的应用程序中经常发生。我的应用程序总是有一个正在运行的服务(这就是本例中的上下文)。我对图像的性能不太了解,我知道它们在空间中的使用量是实际大小的4倍,但对我来说,一遍又一遍地重新创建相同的对象似乎是一种浪费。另外,我的应用程序主要需要的是性能而不是尺寸


因此,我想知道是否最好在服务中保留每次生成的位图,以便它们只创建一次(只有主图像位图每次都会更改),或者甚至作为可绘制位图从中创建位图?

永远不要将可绘制位图保存在显示的活动/片段之外。
它很容易造成内存泄漏:drawable保留对其活动的引用,因此垃圾收集器无法销毁它,即使它已被销毁并在此后重新创建。

请改用位图。

Ah好的,那么位图保存后可以安全使用,而不是反复创建吗?如果要多次重复使用同一位图,强烈建议不要每次都重新创建。尤其重要的是避免在对性能至关重要的方法(如getView()中创建位图(或任何昂贵的对象)。这就是我一直在寻找的答案。非常感谢:-)不客气。不要犹豫,在您的项目上不时运行androidlint,它为良好的编码实践和可能的优化提供了非常有用的建议。我认为它还包括对位图的检查。