I was excited to see the introduction of the AsyncTask. Anything to
make the division of UI / Background work easier is good in my book.
What bugged me was that I couldn’t see a way to keep a long running
process alive during a context switch e.g. a layout orientation
change. As far as I could see, the common way to ‘solve’ the problem
was by stopping the process and then recreate it in the new Activity.
This will work in some cases, but in others it won’t work. For
example, a background task of creating a new user account on a website
cannot be re-sent easily.
I spent a day and hacked out an alternative way of doing things. My
approach was this.
* We know that the AsyncTask contains a Context which is the
Activity that creates it. So it must be destroyed when the Activity is
destroyed e.g. at a context switch due to a screen orientation change.
* Since we want to background task to continue ‘across’ a context
switch we cannot define the background task within the AsyncTask.
Instead we create a Future and pass that to some implementation of
AsyncTask that only wait for the Future to compute.
* At a context switch we can destroy the AsyncTask without
interrupting the Future which we can hold on to.
* When creating the new Activity post-context switch we create a
new fresh ASyncTask and give it the same still running Future.
The easiest way to understand this is to see it in action. I've
uploaded an example implementation of the above idea to:
http://www.shodansoftware.com/DevelopmentTools/BackgroundProcesses
You're free to check it out and make use of it as you please. If you
do use it though, I'd appreciate if you'd let me know just so I can
get that warm fuzzy feeling of having helped someone out. If you have
comments or suggestions, again, I'd like to know.
Thanks!
Gustav a.k.a. Parakoos
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---