AsyncTaskLoader vs AsyncTask
Asked Answered
R

4

130

Since Honeycomb and the v4 Compatibility Library it is possible to use AsyncTaskLoader. From what I understand, the AsyncTaskLoader can survive through config changes like screen flips.

Is it recommended to use AsyncTaskLoader instead of AsyncTask? Does LoaderManager get in the picture too?

But I haven't found any good example(s) about how to correctly use the AsyncTaskLoader. The docs also provide no examples. Can anyone provide some good examples.

Radcliffe answered 19/8, 2011 at 11:20 Comment(0)
H
51

You can have a look at the compatibility library's source code to get more info. What a FragmentActivity does is:

  • keep a list of LoaderManager's
  • make sure they don't get destroyed when you flip your phone (or another configuration change occurs) by saving instances using onRetainNonConfigurationInstance()
  • kick the right loader when you call initLoader() in your Activity

You need to use the LoaderManager to interface with the loaders, and provide the needed callbacks to create your loader(s) and populate your views with the data they return.

Generally it should be easier than managing AsyncTask's yourself. However, AsyncTaskLoader is not exactly well documented, so you should study the example in the docs and/or model your code after CursorLoader.

Hagood answered 19/8, 2011 at 14:10 Comment(1)
I will have a look at this. Maybe it is too early to find good examples about AsyncTaskLoader, and when more developers start using it, more examples will come.Radcliffe
C
51

Comparing AsyncTaskLoader vs. AsyncTask, as you may know, when you rotate your device screen, it may destroy and re-create your activity. To make it clear. let's imagine rotating your device while networking transaction is going on:

AsyncTask will be re-executed as a background thread again, and the previous background thread processing will just be redundant and zombie.

AsyncTaskLoader will just be re-used basing on Loader ID that was registered in Loader Manager before, so re-executing network transaction will be avoided.

In summary, AsyncTaskLoader prevents duplication of background threads and eliminates duplication of zombie activities.

Coulomb answered 13/1, 2017 at 9:37 Comment(0)
T
11

AsyncTaskLoader performs the same function as the AsyncTask, but a bit better. It can handle Activity configuration changes more easily, and it behaves within the life cycles of Fragments and Activities. The nice thing is that the AsyncTaskLoader can be used in any situation that the AsyncTask is being used. Anytime data needs to be loaded into memory for the Activity/Fragment to handle, The AsyncTaskLoader can do the job better.

There are a few issues with using AsyncTasks, though:

  • Configuration changes can mess things up
  • Pausing an activity doesn’t pause the AsyncTask
  • A fair amount of boilerplate code (which means more possible errors)

AsyncTaskLoader doc

Thinskinned answered 27/9, 2016 at 13:47 Comment(0)
M
8

Some differences other than described in other answers:

When using AsyncTaskLoader over AsyncTask:

  • AsyncTaskLoader gives us liberty to load old cached data until new data is returned by forceLoad()

  • We can set delays to AsyncTaskLoader by setUpdateThrottle() which can prevent consecutive updates to client (Activity/Fragment)

  • AsyncTaskLoader can be shared to multiple fragments if they have common parent activity and if it was started from getActivity().getSupportLoaderManager()

  • AsyncTaskLoader is destroyed by LoaderManger when its linked activity is no more available. while we need to manually destroy AsyncTasks if its caller activity destroys. This saves our time from writing all the clearing stuff. AsyncTaskLoader plays well with their respective lifecycles.

So, AsyncTaskLoader is way better than AsyncTask.

Maffa answered 18/2, 2018 at 6:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.