java - 内存与性能,哪个最好?

标签 java android performance memory bitmap

我需要拍摄图像,缩放它, mask 它,添加背景(以防其中一些是透明的),然后添加覆盖图像。为此,我编写了以下内容:

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 倍,但这对我来说一遍又一遍地重新创建相同的对象是一种浪费。另外,我的应用程序的主要需求是性能而不是大小。

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

最佳答案

切勿在显示的 Activity/fragment 之外保存可绘制对象。
它很容易造成内存泄漏:可绘制对象保留对其 Activity 的引用,因此垃圾收集器无法销毁它,即使它已被销毁并重新创建。
请改用位图。

关于java - 内存与性能,哪个最好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16397786/

相关文章:

java - Robocode(java): how can I make my robot change color depending on the result of getEnergy()?

java - 在哪里可以找到可与 vlcj 2.1.0 配合使用的 "libvlc"的更新版本?

java - 创建一个组合来自两个对象的字段的 ArrayList?

java - 压缩二进制数据的快速方法?

android - Android在游戏中播放声音

java - 我什么时候应该使用基元而不是包装对象?

java - 扩展应用程序示例导致程序崩溃

android - 将位图设置为 NetworkImageView

python - 如何将多个字典的列表合并到列表字典中?

.net - 单声道对于 Mac OS X 来说足够快吗?