5

我正在测试一个应用程序,其中我们有一个列表视图,其中包含通过网络检索的图像列表。当我在 android 设备 2.3.3(WIFI 速度 512 KBPS)上运行应用程序并检查 DDMS(线程查看器)时,线程数一直从 25 增加到 50。但是当我在设备 4.0(WIFI 速度)上测试相同的应用程序时5 MBPS),线程数没有增加。

谁能帮我理解为什么会这样?是由于android操作系统的差异还是其他原因?

提前致谢。

4

3 回答 3

12

你在用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 - 同样,异步任务按顺序执行。

于 2012-10-26T03:45:47.103 回答
1

您是否使用 AsyncTask 执行后台操作?我认为GB和ICS之间AsyncTask的实现是有区别的。

尝试在线程完成其工作时添加一些调试日志,并查看两个版本之间是否存在差异。

于 2012-10-26T03:35:53.927 回答
0

对于 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);
                }
            }
        }
    });

请享用

于 2015-07-12T06:59:28.770 回答