Android的 - 在2.3.3和4.0 OS异步任务行为(Android - Async Tas

2019-07-02 16:07发布

我测试,我们有通过网络检索到的图像列表中的列表视图的应用程序。 当我运行机器人装置2.3.3(WIFI速度512 KBPS)上的应用程序,并检查DDMS(线程查看器),线程的数量不断从25增加至50但是,当我上测试设备4.0(WIFI速度相同的应用程序5 MBPS),线程数没有增加。

谁能帮助我了解为什么发生这种情况? 正是由于Android操作系统的差异或任何其他原因?

提前致谢。

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

预OS 1.6 - 多任务异步获取的顺序执行。 OS 1.6至OS 2.3 - 异步任务并行运行。 从3.0 - 再次,异步任务被依次执行。



Answer 2:

您是否使用的AsyncTask来执行后台操作? 我觉得这是GB和ICS之间的AsyncTask的执行之间的差异。

尝试添加一些调试记录当线程完成其工作,并查看是否有两个版本之间的差异。



Answer 3:

您可以使用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);
                }
            }
        }
    });

请享用



文章来源: Android - Async Task behavior in 2.3.3 and 4.0 OS