Android ApiDemos樣本解析(75):Graphics->PurgeableBitmap

來源:互聯網
上載者:User

BitmapFactory.Option 由一個屬性public boolean inPurgeable

如果inPurgeable 設為True的話表示使用BitmapFactory建立的Bitmap用於儲存Pixel的記憶體空間在系統記憶體不足時可以被回收,在應用需要再次訪問Bitmap的Pixel時(如繪製Bitmap或是調用getPixel),系統會再次調用BitmapFactory decoder重建Bitmap的Pixel數組。為了能夠重新解碼映像,bitmap要能夠訪問儲存Bitmap的未經處理資料。

本例顯示了inPurgeable設為True和False的兩種情況,不停的建立一個bitmap

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

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


作者:mapdigit

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.