【问题标题】:Android - Async Task behavior in 2.3.3 and 4.0 OSAndroid - 2.3.3 和 4.0 操作系统中的异步任务行为
【发布时间】:2012-10-16 07:58:00
【问题描述】:

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

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

提前致谢。

【问题讨论】:

  • 请贴出相关代码!
  • 我只有apk文件。我没有代码。

标签: android multithreading threadpool


【解决方案1】:

您使用的是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 - 同样,异步任务按顺序执行。

【讨论】:

  • 有任何关于为什么做出这些设计选择的消息吗?
【解决方案2】:

您是否使用 AsyncTask 来执行后台操作?我觉得GB和ICS的AsyncTask的实现是有区别的。

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

【讨论】:

  • 感谢 dnkoutso ... 是的,Async Task 用于执行后台操作。我们可以做什么样的调试日志来更好地理解它?
  • 当你的线程完成工作时。如果它是一个异步任务,则可能有一个内部使用的固定线程池。线程存在这一事实并不意味着什么,如果需要,它们将被重用。
【解决方案3】:

您可以将 AsyncTaskCompat.executeInParallel 用于 API

使用示例:

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

享受

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多