我测试,我们有通过网络检索到的图像列表中的列表视图的应用程序。 当我运行机器人装置2.3.3(WIFI速度512 KBPS)上的应用程序,并检查DDMS(线程查看器),线程的数量不断从25增加至50但是,当我上测试设备4.0(WIFI速度相同的应用程序5 MBPS),线程数没有增加。
谁能帮助我了解为什么发生这种情况? 正是由于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);
}
预OS 1.6 - 多任务异步获取的顺序执行。 OS 1.6至OS 2.3 - 异步任务并行运行。 从3.0 - 再次,异步任务被依次执行。
您是否使用的AsyncTask来执行后台操作? 我觉得这是GB和ICS之间的AsyncTask的执行之间的差异。
尝试添加一些调试记录当线程完成其工作,并查看是否有两个版本之间的差异。
您可以使用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);
}
}
}
});
请享用