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
.
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/