代码示例1:代码段下方处理大尺寸位图..
// Here reusing same variable "bitmap"
// Decode the JPEG file into a Bitmap
Bitmap bitmap = BitmapFactory.decodeFile(photoDir.getAbsolutePath(), bmOptions);
//Re-sizing
Matrix mtx = new Matrix();
bitmap =Bitmap.createScaledBitmap(bitmap, targetW, targetH,true);
mtx.postRotate(90);
// Rotating Bitmap
bitmap = Bitmap.createBitmap(bitmap, 0, 0, targetW, targetH, mtx, true);
imgPhoto.setImageBitmap(bitmap );
代码示例2:
//Here i used different variables
// Decode the JPEG file into a Bitmap
Bitmap orginalBitmap = BitmapFactory.decodeFile(photoDir.getAbsolutePath(), bmOptions);
//Re-sizing
Matrix mtx = new Matrix();
Bitmap resizedBitmap =Bitmap.createScaledBitmap(orginalBitmap , targetW, targetH,true);
mtx.postRotate(90);
// Rotating Bitmap
Bitmap rotatedBitmap= Bitmap.createBitmap(resizedBitmap , 0, 0, targetW, targetH, mtx, true);
imgPhoto.setImageBitmap(rotatedBitmap);
问题:在内存和速度方面哪个代码段更好?
答案 0 :(得分:1)
我认为这些都应该是一样的,对吗?我的意思是变量存在于堆栈中,这是堆影响,这将是显而易见的。在这种情况下,3个变量的大小可以忽略不计,比如说最纯粹的32位指针+另一个32位的元数据。 3 long
s vs 1 long
,你无法区分大多数现代机器(即使最低规格的android手机也不应该看到明显的影响)。
如果你想更有效地使用内存,我认为所有这些中最大的收获就是如果在第二个中使用3个单独的变量,你可能能够回收旧的位图,只保留那个位图。在图像视图上设置。这将更有效地利用内存。由于byte[]
方面,位图很昂贵。这些不是随机分配,这些是连续的内存块,当你分配更多不同大小的byte[]
时,这些内存变得非常稀疏。所以回收在那里会有很多帮助。
答案 1 :(得分:1)
在原则中,它应该没有任何区别。如果唯一的引用是不再实际使用的本地引用,那么一个好的JVM将使一个对象可以被垃圾回收,这样你的两个代码样本就可以完全相同。
我想知道你是否在试图发明一个不存在的理论问题?如果您实际上遇到了性能问题,那么请进行配置文件。如果没有,请不要太担心。