现在的位置: 首页 > 综合 > 正文

Android ApiDemos示例解析(75):Graphics->PurgeableBitmap

2013年05月21日 ⁄ 综合 ⁄ 共 1687字 ⁄ 字号 评论关闭

BitmapFactory.Option 由一个属性public boolean inPurgeable

如果inPurgeable 设为True的话表示使用BitmapFactory创建的Bitmap用于存储Pixel的内存空间在系统内存不足时可以被回收,在应用需要再次访问Bitmap的Pixel时(如绘制Bitmap或是调用getPixel),系统会再次调用BitmapFactory decoder重新生成Bitmap的Pixel数组。为了能够重新解码图像,bitmap要能够访问存储Bitmap的原始数据。

本例显示了inPurgeable设为True和False的两种情况,不停的创建一个bitmap

mBitmapArray[mDecodingCount] = BitmapFactory.decodeByteArray(
 bitstream, 0, bitstream.length, mOptions);

mOptions 为BitmapFactory.Option类型,mOptions.isPurgable可以为true和false。 在isPurgeable为false时表示创建的Bitmap的Pixel内存空间不能被回收,这样BitmapFactory在不停decodeByteArray创建新的Bitmap对象,不同设备的内存不同,因此能够同时创建的Bitmap个数可能有所不同,200个bitmap足以使大部分的设备重新OutOfMemory错误。

当isPurgable设为true时,系统中内存不足时,可以回收部分Bitmap占据的内存空间,这时一般不会出现OutOfMemory 错误。

本例有两个例子NonPurgeable 和 Purgeable,其定义的代码是同样的类PurgeableBitmap和PurgeableBitmapView, 但它们在Android的Launcher都有自己的启动图标。这是因为在AndroidManifest.xml中使用了activity-alias定义。

activity-alias定义可以为同一个Activty指定别名,指定不同的IntentFilter或其它配置,从而使得同一个Activity可以有不同的属性,图标等。 activity-alias 和activity支持的属性基本一致,在功能上和Activity基本一致。

<activity android:name=”.graphics.PurgeableBitmap
android:label=”Graphics/PurgeableBitmap/NonPurgeable”>
<intent-filter>
< action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.SAMPLE_CODE” />
< /intent-filter>
< /activity>

<activity-alias android:targetActivity=”.graphics.PurgeableBitmap
android:name=”Purgeable” android:label=”Graphics/PurgeableBitmap/Purgeable”>
<intent-filter>
< action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.SAMPLE_CODE” />
< /intent-filter>
< /activity-alias>

可以看到activity-alias定义的targetActivity 和activity的android:name指向同一个Activity。

程序中使用getPackageManager 读取Activity的Label,根据Label的值来判断启动的是Purgeable还是NonPurgeable.

 

抱歉!评论已关闭.