我正在測試一個應用程序,我們有一個列表視圖與網絡上檢索的圖像列表。當我在android設備2.3.3(WIFI速度512 KBPS)上運行應用程序並檢查DDMS(線程查看器)時,線程數量從25增加到50。但是當我在設備4.0上測試相同的應用程序(WIFI速度5 MBPS),線程數量沒有增加。Android - 異步任務行爲在2.3.3和4.0操作系統
任何人都可以幫助我理解爲什麼會發生這種情況嗎?這是由於Android操作系統差異或任何其他原因?
在此先感謝。
我正在測試一個應用程序,我們有一個列表視圖與網絡上檢索的圖像列表。當我在android設備2.3.3(WIFI速度512 KBPS)上運行應用程序並檢查DDMS(線程查看器)時,線程數量從25增加到50。但是當我在設備4.0上測試相同的應用程序(WIFI速度5 MBPS),線程數量沒有增加。Android - 異步任務行爲在2.3.3和4.0操作系統
任何人都可以幫助我理解爲什麼會發生這種情況嗎?這是由於Android操作系統差異或任何其他原因?
在此先感謝。
你期運用AsyncTask
。在Android 3.0之後,AsyncTask
的默認行爲是使用SERIAL_EXECUTOR在單個線程中執行的。
如果您在任何系統版本要AsyncTask
同時運行,你可以使用此代碼。
AsyncTask task = new YourTask();
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
task.execute(params);
} else {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
}
Pre OS 1.6 - 多個異步任務按順序執行。 OS 1.6至OS 2.3 - 異步任務並行運行。 從3.0開始 - 同樣,異步任務依次執行。
關於爲什麼選擇這些設計的任何說法? –
您可以使用AsyncTaskCompat.executeInParallel的API < 11,你會發現這個類在程序兼容性V4庫。
使用的爲例:
AsyncTaskCompat.executeParallel(new AsyncTask<Void, Void, Bitmap>() {
@Override
protected Bitmap doInBackground(Void... params) {
return MediaStore.Images.Thumbnails.getThumbnail(
imageView.getContext().getContentResolver(),
id,
MediaStore.Images.Thumbnails.MINI_KIND,
null);
}
@Override
protected void onPostExecute(Bitmap bitmap) {
imageView.setImageBitmap(bitmap);
if (bitmap != null) {
// Add the image to the memory cache first
CACHE.put(id, bitmap);
if (listener != null) {
listener.onImageLoaded(bitmap);
}
}
}
});
享受
請張貼相關的代碼! – vikki
我只有apk文件。我沒有代碼。 – Prem