Basic AsyncTaskLoader
suggest changeAsyncTaskLoader
is an abstract Loader
that provides an AsyncTask
to do the work.
Here some basic implementation:
final class BasicLoader extends AsyncTaskLoader<String> { public BasicLoader(Context context) { super(context); } @Override public String loadInBackground() { // Some work, e.g. load something from internet return "OK"; } @Override public void deliverResult(String data) { if (isStarted()) { // Deliver result if loader is currently started super.deliverResult(data); } } @Override protected void onStartLoading() { // Start loading forceLoad(); } @Override protected void onStopLoading() { cancelLoad(); } @Override protected void onReset() { super.onReset(); // Ensure the loader is stopped onStopLoading(); } }
Typically Loader
is initialized within the activity’s onCreate()
method, or within the fragment’s onActivityCreated()
. Also usually activity or fragment implements LoaderManager.LoaderCallbacks
interface:
public class MainActivity extends Activity implements LoaderManager.LoaderCallbacks<String> { // Unique id for loader private static final int LDR_BASIC_ID = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Initialize loader; Some data can be passed as second param instead of Bundle.Empty getLoaderManager().initLoader(LDR_BASIC_ID, Bundle.EMPTY, this); } @Override public Loader<String> onCreateLoader(int id, Bundle args) { return new BasicLoader(this); } @Override public void onLoadFinished(Loader<String> loader, String data) { Toast.makeText(this, data, Toast.LENGTH_LONG).show(); } @Override public void onLoaderReset(Loader<String> loader) { } }
In this example, when loader completed, toast with result will be shown.
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents