Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Guideline to choose among AsyncTaskLoader and AsyncTask to be used in Fragment

Tags:

android

Look at LoaderCustomSupport (Use AsyncTaskLoader) and FragmentRetainInstanceSupport (Use Thread, almost equivalent to AsyncTask)

Both examples have the following similarities.

  • Both do not block UI thread when loading data
  • The data fetching thread is not destroyed when user performs configuration change like screen rotation.
  • When data fetching thread finished fetching data, it can update to the correct Fragment UI

However, there are differences.

AsyncTaskLoader

  • Seems like there is no easy way to update intermediate progress to a progress bar dialog

AsyncTask

  • Not sure on this. But Android documentation seems to recommend AsyncTaskLoader for async data loading and updating final result to UI?

Is there any guideline, or checklist to look at, to make a decision on whether to choose AsyncTaskLoader or AsyncTask, to do a time-consuming loading task and update the result to Fragment's UI?

like image 870
Cheok Yan Cheng Avatar asked Feb 26 '13 01:02

Cheok Yan Cheng


People also ask

What is AsyncTask and AsyncTaskLoader?

AsyncTask will be re-executed as background thread again, and previous background thread processing was just be redundant and zombie. AsyncTaskLoader will be just re-used basing on Loader ID that registered in Loader Manager before, so avoid re-executing network transaction.

What is AsyncTaskLoader How do you use AsyncTaskLoader?

AsyncTaskLoader is used to perform an asynchronous task in the background of the application, so the user can also interact with the application during that process. As soon as the task is completed, the result will be updated to the interface.

Is AsyncTaskLoader deprecated?

Stay organized with collections Save and categorize content based on your preferences. This class was deprecated in API level 28.

Are special purpose classes that manage loading and reloading updated data asynchronously in the background using AsyncTask?

Loaders are special purpose classes that manage loading and reloading updated data asynchronously in the background using AsyncTask.


1 Answers

your question made me interested and tried sometimes to look into the differences. Here i am writing my observations.

  1. For the premature termination the asynchronous task using AsyncTask will continue running in its thread. The processing of the results can soon lead to unrequested results while AsyncTaskLoader handle the premature termination of the activity

  2. AsyncTaskLoader handles activity configuration changes (IE when the user rotates the screen).

  3. AsyncTaskLoader is intended load data for DataAdapters so for this purpose it is best to use AsyncTaskLoader But if you need to change UI (specially fragments) after task completion it is better to use AsyncTask as you can't change fragments in onLoadFinished of AsynTaskLoader.

So to me the usage depends on your task. and if the above 3 points doesnt bother you then the performance is same ( haven't found any documents though , but in this case asynctaskloader is recommended :S)

some related links

AsyncTaskLoader vs AsyncTask

http://andreas-kluck.blogspot.com/2012/02/asynctask-and-asynctaskloader.html

like image 162
stinepike Avatar answered Oct 05 '22 14:10

stinepike