Update UI from an AsyncTaskLoader

android, android-asynctask, asynctaskloader

Solution

It's actually possible. You essentially need to subclass the `AsyncTaskloader` and implement a `publishMessage()` method, which will use a `Handler` to deliver the progress message to any class that implements the `ProgressListener` (or whatever you want to call it) interface.

Download this for an example: http://www.2shared.com/file/VW68yhZ1/SampleTaskProgressDialogFragme.html (message me if it goes offline) - this was based of http://habrahabr.ru/post/131560/

Problem

I've converted my `AsyncTask` to an `AsyncTaskLoader` (mostly to deal with configuration changes). I have a `TextView` I am using as a progress status and was using `onProgressUpdate` in the `AsyncTask` to update it. It doesn't look like `AsyncTaskLoader` has an equivalent, so during `loadInBackground` (in the `AsyncTaskLoader`) I'm using this: ``` getActivity().runOnUiThread(new Runnable() { public void run() { ((TextView)getActivity().findViewById(R.id.status)).setText("Updating..."); } }); ``` I am using this in a `Fragment`, which is why I'm using `getActivity()`. This work pretty well, except when a configuration change happens, like changing the screen orientation. My `AsyncTaskLoader` keeps running (which is why I'm using an `AsyncTaskLoader`), but the `runOnUiThread` seems to get skipped. Not sure why it's being skipped or if this is the best way to update the UI from an `AsyncTaskLoader`. UPDATE: I ended up reverting back to an `AsyncTask` as it seems better suited for UI updates. Wish they could merge what works with an `AsyncTask` with an `AsyncTaskLoader`.

Original source