Android - Async Task behavior in 2.3.3 and 4.0 OS

前端 未结 3 1103
忘了有多久
忘了有多久 2020-12-10 18:26

I am testing an application where we have a list view with list of images retrieved over network. When i run the application on android device 2.3.3 (WIFI speed 512 KBPS) an

相关标签:
3条回答
  • 2020-12-10 18:48

    Are you using an AsyncTask to execute the background operation? I think there is a difference between the implementation of the AsyncTask between GB and ICS.

    Try to add some debug logging when the thread finishes its work and see if there is a difference between the two versions.

    0 讨论(0)
  • 2020-12-10 18:54

    Are you useing AsyncTask. After Android 3.0, the default behavior of AsyncTask is execute in a single thread using SERIAL_EXECUTOR.

    If you want AsyncTask run concurrently on any system version, you may use this code.

    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 - Multiple Async Tasks gets executed in sequence. OS 1.6 till OS 2.3 - Async Tasks run in parallel. From 3.0 - Again, Async Tasks gets executed in sequence.

    0 讨论(0)
  • 2020-12-10 19:02

    You can use the AsyncTaskCompat.executeInParallel for API < 11, you find this class in the appcompat v4 library.

    An exemple of use :

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

    enjoy

    0 讨论(0)
提交回复
热议问题