我正在测试一个应用程序,其中我们有一个列表视图,其中包含通过网络检索的图像列表。当我在 android 设备 2.3.3(WIFI 速度 512 KBPS)上运行应用程序并检查 DDMS(线程查看器)时,线程数一直从 25 增加到 50。但是当我在设备 4.0(WIFI 速度)上测试相同的应用程序时5 MBPS),线程数没有增加。
谁能帮我理解为什么会这样?是由于android操作系统的差异还是其他原因?
提前致谢。
我正在测试一个应用程序,其中我们有一个列表视图,其中包含通过网络检索的图像列表。当我在 android 设备 2.3.3(WIFI 速度 512 KBPS)上运行应用程序并检查 DDMS(线程查看器)时,线程数一直从 25 增加到 50。但是当我在设备 4.0(WIFI 速度)上测试相同的应用程序时5 MBPS),线程数没有增加。
谁能帮我理解为什么会这样?是由于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 - 同样,异步任务按顺序执行。
您是否使用 AsyncTask 执行后台操作?我认为GB和ICS之间AsyncTask的实现是有区别的。
尝试在线程完成其工作时添加一些调试日志,并查看两个版本之间是否存在差异。
对于 API < 11,您可以使用 AsyncTaskCompat.executeInParallel,您可以在 appcompat 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);
}
}
}
});
请享用