實現的功能:在ImageView中動態(每隔0.1秒)展示assets下圖片,所有圖片播放完畢後再重新開始播放。
實現思路:
1)通過AssetManager獲取assets下資源,使用BitmapFactory將圖片資源輸入流轉換為Bitmap對象,然後將Bitmap對象設置到ImageView組件中。
2)動態展示圖片(模擬間隔0.1秒)在子線程中操作,Android子線程是不能更新UI的,需要借助Handler(運行在主線程中)與子線程通過Message傳遞數據,完成更新UI的操作。
關鍵技術點:AssetManager應用、Bitmap對象回收技術、Handler應用、多線程及線程的終止等。
第1步:新建一個工程,命名為DisplayImagesDemo,Activity命名為DisplayImagesActivity。
第2步:往assets下拷貝幾張測試用圖片,然後修改main.xml文件,代碼如下:
第3步:修改DisplayImagesActivity,代碼如下:
備注1:
之所以如此處理是因為assets下除了圖片資源還有images、sounds和webkit,打開onCreate下的displayAssets()方法,可以看到輸出日志。
備注2:
如果系統頻繁地去解析、創建Bitmap對象,可能由於前面創建的Bitmap所占用的內存還沒有回收(手機系統本身的內容就比較小),而導致程序運行時引發OutOfMemory錯誤。
事實上,如果將備注2回收Bitmap對象的語句注釋掉,圖片動態展示若干張(視具體情況而定,我在模擬器裡運行只展示了4張就掛掉了),錯誤日志為:
INFO/ActivityManager(73): Low Memory: No more background processes.
第4步:運行程序,效果如下: