一直糾結的問題終於解決了,就是bitmap這個玩意 android
以前在android中,大量的使用圖片,不只可使用Imageview來顯示,能夠作button,window的背景.,你只要放在xml中進行操做,直接利用R.drawable.fiel 就能夠引用了,可是你能夠想一想,若是是訪問網絡獲取的圖片,或者字節,你怎麼接受呢,他不會返回一張image,網絡的傳輸是經過流的,因此這個時候就用到了Bitmap. 數組
Bitmap和BitmmapFactory 網絡
Bitmap表明一張位圖,能夠進行編輯了,操做了,修改了等,通常咱們就利用BitmapFactory來操做得出bitmap 工具
想實例出來一個bitmap有一個靜態的就是BitmapFactory 他是一個工具類,提供了各類方法來建立Bitmap有下面四種方法 spa
BitmapFactory.decodeByteArray(byte[] data,int offset,int length)從指定字節數組的offset位置開始,將長度爲length的字節,轉化成一個Bitmap code
BitmapFactory.decodeFile(String pathName)這個就不用說了吧,從pathName指定的文件中進行解析建立Bitmap對象 xml
BitmapFactory.decodeFileDescriptor(FileDescriptor fd)用於從FileDescriptor對應的文件中解析建立Bitmap對象 對象
BitmapFactory.decodeResource(Resource res,int id)這個至關簡單,用於根據指定的ID從指定的資源中解析,建立Bitmap對象 圖片
BitmapFactory.decodeSream(InputSream is)用於從指定的輸出流中解析 ip
通常狀況下,咱們只要圖片放在drawable目錄下就能夠了,而後經過獲取ID,直接就自動封裝成一個Drawable對象,可是,想一下,手機的內存比較小,你懂的,若是你不斷的去解析建立一個Bitmap對象,可能因爲Bitmap前面建立的尚未回收,致使內存不足,會出現異常,常見的outofmemory,這就是所謂的內存溢出(之前我還不知道,感受好深奧,呵呵).因此咱們要即便的去回收他,android中提供了兩個方法,
boolean isRecycled()返回該bitmap對象是否已經被回收
void recycle(); 強制一個Bitmap對象當即回收本身.
舉例 好比我有一個ImageView控件 ImageView image=(ImageView)findViewById(R.id.image)
BitmapDrawable bit=(BitmapDrawable)image.getDrawable();
if(bit !=null && bit.getBitmap.isRecycled()){
bit.getBitmap.recycle();
}
在補充一下Bitamp是一個位圖,而BitmapDrawable就是封裝了一個Bitmap,因此要得到Bitmap,能夠直接getBitmap();