我正在测试一个应用程序,其中我们有一个列表视图,其中包含通过网络检索的图像列表。当我在Android设备2.3.3(WIFI速度512 KBPS)上运行应用程序并检查DDMS(线程查看器)时,线程数从25开始持续增加到50但是当我在设备4.0上测试相同的应用程序时(WIFI速度) 5 MBPS),线程数没有增加。
任何人都可以帮助我理解为什么会这样吗?是因为Android OS差异还是其他原因?
提前致谢。
答案 0 :(得分:13)
您使用的是AsyncTask
吗?在Android 3.0之后,使用SERIAL_EXECUTOR在单个线程中执行AsyncTask
的默认行为。
如果您希望在任何系统版本上同时运行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开始 - 再次,异步任务按顺序执行。
答案 1 :(得分:1)
您是否使用AsyncTask执行后台操作?我认为GB和ICS之间的AsyncTask的实现存在差异。
尝试在线程完成其工作时添加一些调试日志记录,并查看两个版本之间是否存在差异。
答案 2 :(得分:0)
您可以使用AsyncTaskCompat.executeInParallel for API&lt; 11,你在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);
}
}
}
});
享受