Android杩涢樁緇冧範 - 楂樻晥鏄劇ずBitmap錛堝湪UI涓葷嚎紼嬪?澶勭悊Bitmap錛?鍦║I涓葷嚎紼嬪?澶勭悊Bitma
Android杩涢樁緇冧範 - 楂樻晥鏄劇ずBitmap錛堝湪UI涓葷嚎紼嬪?澶勭悊Bitmap錛?
鍦║I涓葷嚎紼嬪?澶勭悊Bitmap BitmapFactory.decode* 緋誨垪鐨勬柟娉曪紝璁ㄨ?鐨勬槸鎬庝箞鏍峰幓楂樻晥鐨勫姞杞藉ぇ鍥劇墖錛屼絾鏄?笉綆″浘鐗囨暟鎹?殑鏉ユ簮錛岃繖浜涙柟娉曢兘涓嶅簲璇ュ湪UI涓葷嚎紼嬩笂浣跨敤銆傚洜涓鴻繖浜涙柟娉曡?璐圭殑鏃墮棿鏄?笉鍙??浼扮殑錛屽浘鐗囧姞杞藉?璐圭殑鏃墮棿渚濊禆浜庡緢澶氱殑鍥犵礌錛堢綉緇滄垨紜?洏鐨勮?鍐欓?搴︼紝鍥劇墖鐨勫ぇ灝忥紝鎵嬫満CPU鐨勫?鐞嗚兘鍔涚瓑絳夛級銆傚湪紼嬪簭涓?紝鍙??鍏朵腑涓?釜鍥劇墖鍔犺澆浠誨姟闃誨?浜哢I涓葷嚎紼嬶紝閭d箞浣犵殑搴旂敤灝嗕細鏃犲搷搴旓紙ANR錛屼笉鑳藉啀涓庣敤鎴瘋繘琛屼氦浜掍簡錛夛紝Android緋葷粺浼氭樉紺洪?鐭ョ敤鎴鳳紝鐢ㄦ埛灝嗕細閫夋嫨鍏抽棴浣犵殑搴旂敤錛岃繖鏄?竴欏歸潪甯鎬笉濂界殑鐢ㄦ埛浣撻獙銆?/div>
鍑轟簬杩欑?鍘熷洜錛屼綘鍙?互浣跨敤 AsyncTask 鏉ュ湪UI涓葷嚎紼嬪?鐨勭嚎紼嬩腑澶勭悊鍥劇墖鍔犺澆錛屼絾杩樻湁涓?釜闂??錛岃?濡ュ杽澶勭悊濂藉苟鍙戠殑闂??錛屼笅闈㈠皢浠嬬粛杩欎袱縐嶉棶棰樼殑澶勭悊鏂規硶
浣跨敤AsyncTask AsyncTask 綾諱負鎴戜滑鎻愪緵浜嗕竴縐嶅緢濂界殑鏂瑰紡鏉ュ湪UI涓葷嚎紼嬩箣澶栫殑綰跨▼涓?墽琛屼竴浜涗换鍔★紝騫朵笖鎶婁换鍔$殑緇撴灉杩斿洖鍒癠I涓葷嚎紼嬩笂銆備綘闇??緇ф壙AsyncTask 綾誨苟閲嶈澆涓?簺鎻愪緵鐨勬柟娉曟潵浣跨敤杩欑?寮傛?浠誨姟鏂瑰紡錛屼笅闈㈡槸涓?釜紺轟緥紼嬪簭
ListView鍜?a href="http://www.android-doc.com/reference/android/widget/GridView.html" style="font-family:'courier new',courier,monospace; font-size:14px; font-weight:bold; line-height:21px; color:rgb(37,138,175); text-decoration:initial">GridView 杩欑?甯歌?鐨勮?鍥劇粍浠訛紝緇撳悎AsyncTask 涓?搗浣跨敤鐨勬椂鍊欎細浜х敓鍙﹀?涓?釜闂??銆備負浜嗗敖鍙?兘鐨勬彁楂樺唴瀛樼殑浣跨敤鏁堢巼錛屽綋鐢ㄦ埛婊氬姩緇勪歡鏃訛紝杩欑被瑙嗗浘緇勪歡浼氬驚鐜?埄鐢ㄥ畠鐨勫瓙瑙嗗浘錛屽?鏋滄瘡涓?瓙瑙嗗浘閮藉Е鍙戜竴涓?span style="background-color:rgb(249,249,249); color:rgb(34,34,34); font-family:Roboto,sans-serif; font-size:14px; line-height:19px">AsyncTask錛岄偅涔堝皢涓嶄細鏈変繚璇佺浉鍏寵仈鐨勮?鍥炬槸鍚﹀凡緇忓洖鏀朵緵鍙﹀?涓?釜瀛愯?鍥懼驚鐜?嶠鐢ㄤ簡銆傝?涓旓紝寮傛?浠誨姟鐨勬墽琛岄『搴忓苟涓嶆剰鍛崇潃浠誨姟鐨勬墽琛岀粨鏉熸椂鐨勯『搴忎篃鏄?繖鏍風殑銆傜粨鍚堣繖涓ょ?鍘熷洜錛屽紩鍙戠殑杩欎釜騫跺彂闂??鏈夊彲鑳戒細瀵艱嚧鍥劇墖璁劇疆鍒闆瓙瑙嗗浘涓婃椂浼氬彂鐢熼敊浣嶃?
閽堝?杩欑?騫跺彂銆侀敊浣嶉棶棰橈紝鎴戜滑鍙?互璁?a href="http://www.android-doc.com/reference/android/widget/ImageView.html" style="font-family:'courier new',courier,monospace; font-size:14px; font-weight:bold; line-height:21px; background-color:rgb(249,249,249); color:rgb(37,138,175); text-decoration:initial">ImageView 瀵硅薄瀛樺偍涓?釜鏈?繎浣跨敤鐨?a href="http://www.android-doc.com/reference/android/os/AsyncTask.html" style="font-family:'courier new',courier,monospace; font-size:14px; font-weight:bold; line-height:21px; color:rgb(37,138,175); text-decoration:initial">AsyncTask 鐨勫紩鐢?紝杩欐牱鎴戜滑鍙?互鍘繪?嫻嬩换鍔℃槸鍚﹀畬鎴?/div>
鍒涘緩涓?釜涓撶敤鐨?a href="http://www.android-doc.com/reference/android/graphics/drawable/Drawable.html" style="font-family:'courier new',courier,monospace; font-size:14px; font-weight:bold; line-height:21px; color:rgb(37,138,175); text-decoration:initial">Drawable 瀛愮被鏉ュ瓨鍌ㄤ竴涓?笌涔嬪?搴旂殑AsyncTask (杩欎釜AsyncTask 瀹為檯涓婃槸鐢ㄦ潵鍔犺澆Drawable 鐨勪换鍔?錛屽綋鍥劇墖鍔犺澆浠誨姟杩樺湪鎵ц?鏃訛紝灝卞彲浠ヤ嶠鐢ㄨ繖涓?a href="http://www.android-doc.com/reference/android/graphics/drawable/Drawable.html" style="font-family:'courier new',courier,monospace; font-size:14px; font-weight:bold; line-height:21px; color:rgb(37,138,175); text-decoration:initial">Drawable 鏉ユ樉紺轟竴寮犻粯璁ょ殑鍥劇墖浜嗭紝褰撲换鍔″畬鎴愭椂杩欎釜Drawable闅忎箣琚?浛鎹?/div>class BitmapWorkerTask extends AsyncTask { ... @Override protected void onPostExecute(Bitmap bitmap) { // if task cancelled , this method is never invoked // why check here ? if (isCancelled()) { bitmap = null; } if (imageViewReference != null && bitmap != null) { final ImageView imageView = imageViewReference.get(); final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView); // 鍒ゆ柇褰撳墠task鏄?惁鏄?浉鍏寵仈鐨則ask if (this == bitmapWorkerTask && imageView != null) { imageView.setImageBitmap(bitmap); } } }}
鍓嶉潰鐨処mageView鍔犺澆鐨勫疄鐜版柟寮忛?鐢ㄤ簬鍍?/span>ListViewandGridView杩欑被鐨刄I瑙嗗浘緇勪歡錛屾垜浠?彲浠ュ湪Adapter涓?殑getView()鏂規硶涓?皟鐢?/span>loadBitmap 鏂規硶
