我正在测试一个应用程序,我们有一个列表视图与网络上检索的图像列表。当我在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