Android 不同版本下Bitmap创建差异

原创 2013年12月04日 11:04:01

1.问题描述

一个雪花效果,在Android4.0以下系统正常运行,但是在Android4.1上异常退出。

2.问题定位

看一段代码

    private Bitmap		mflakeImage		= null;
    private Bitmap		mflakeImageTemp		= null;
    mflakeImageTemp = BitmapFactory.decodeResource(resources, R.drawable.snow_1);
    mflakeImage = Bitmap.createScaledBitmap(this.mflakeImageTemp, mflakeImageTemp.getWidth(),
    mflakeImageTemp.getHeight(), true);

    Log.d("cjp", "mflakeImageTemp=" + mflakeImageTemp);
    Log.d("cjp", "mflakeImage=" + mflakeImage);
    this.mflakeImageTemp.recycle();
    Log.d("cjp", "mflakeImage.isRecycled()=" + mflakeImage.isRecycled());

上面是一段简化后的代码,用于说明问题就行了:即从一张Bitmap,利用createScaledBitmap得到其另一张缩放的Bitmap,但是其实并没有缩放!

上段代码在Android4.0以下版本,mflakeImageTemp和mflakeImage是不同的两张图,但是在Android4.1上却是一张图。log如下:
4.0:
D/cjp     (21170): mflakeImageTemp=android.graphics.Bitmap@41cf0d28
D/cjp     (21170): mflakeImage=android.graphics.Bitmap@41cf32f0
D/cjp     (21170): mflakeImage.isRecycled()=false
4.1:
D/cjp     (11448): mflakeImageTemp=android.graphics.Bitmap@4179c850
D/cjp     (11448): mflakeImage=android.graphics.Bitmap@4179c850
D/cjp     (11448): mflakeImage.isRecycled()=true
所以,在4.1版本上,继续对已经回收的mflakeImage绘制雪花,就会导致异常退出


3. 为何有上述代码?
有人会问,既然没有任何缩放,为何先从一张图createScaledBitmap,然后把原图回收,这不等于绕了一圈回到原地?
没错。不过上述这份代码只是示意代码,原来的雪花效果,功能比较完善,封装比较好。它可以用一片雪花,通过设置Scale、Alpha、Rotate等参数设置,通过随机数,实现以假乱真的效果。
不过,由于我做这个的时候,设计师切了大小不同的图,就没必要进行缩放,所以我把Scale简单设置为1,而且我调试用的手机又是4.0的,所以这个问题就没有发现。


4.总结
Android SDK的每一次升级,都有一些变化(优化),当我们不清楚知道这些变化的时候,尽量审视下自己的代码,是不是会出现这种优化之后的问题。




                    

相关文章推荐

Android实战技巧:多线程AsyncTask(版本不同,有点差异)

Android实战技巧:多线程AsyncTask(版本不同,有点差异)   转载AsyncTask的介绍及基本使用方法 关于AsyncTask的介绍和基本使用方法可以参考官方文档...

搭建Spring4.1与Spring4.2 websock+stomp+activeMQ需要注意事项:spring4不同版本websocket差异

报错原因是:spring4.2.4版本使用的是reactor-net-2.0.7.RELEASE,但是spring4.1.4版本不能使用这个版本。下面源码是4.1.4版本的,需要reactor.io....

每天学一点flex(3) :文本自适应高度在不同版本的sdk是否存在差异?

文本自适应高度在不同版本的sdk是否存在差异?

不同版本cocos2d-x代码差异

原文: http://blog.163.com/zhoulong19880518@126/blog/static/607097022012824959139/ 最近看cocos2d-x ...

DIV CSS在不同IE版本和FF以及Chrome中的兼容性差异解决方法(推荐)

一些内容比之前 为了方便自己查询,省得每次遇到问题都要满世界搜,转篇实用的:DIV+CSS 与不同 IE 版本等的兼容性。 一、!important (功能有限) 随着 IE7 对 !importan...

不同版本iOS的特性和差异

1.iPhone OS 2.0         苹果在2008年3月6日iPhone SDK Roadmap会上正式介绍了iPhone OS 2.0。这个版本的获得的重要更新可以分成一下4大类: -...

Bitmap进化史及不同版本下的回收

在App开发中,如果对Bitmap的管理不是很谨慎,就很容易出现OOM。虽然现在网上有许多优秀的开源图片加载框架,但在有些情况无法使用那些框架去加载图片,比如比较 复杂的自定义View。本文结合GOO...

关于ios不同版本间的内存管理差异和iso6与以前版本内存管理的兼容

转载地址:http://blog.csdn.net/likendsl/article/details/8199350 官方文档讲解的是比较详细的: https://develop...

关于iOS不同版本间的内存管理差异和iOS6与以前版本内存管理的兼容

官方文档讲解的是比较详细的:          https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGf...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 不同版本下Bitmap创建差异
举报原因:
原因补充:

(最多只允许输入30个字)