> Has anybody got any idea why this would be happening?

Well...  from 
http://brainflush.wordpress.com/2009/11/16/introducing-droid-fu-for-android-betteractivity-betterservice-and-betterasynctask/

So the basic idea is: launch an AsyncTask making your service call,
show a nifty progress dialog while the task thread is running, and
have the task’s result be posted back to your activity once it
completes. Cool, but what if the user decides to rotate the screen
while your task is running? Or a phone call comes in, interrupting
your app, and Android decides to kill it? Both these actions will
effectively terminateyour activity, and recreate it when resuming
(yes, a screen rotation kills your activity, very clever, isn’t it?).
Unfortunately, any AsyncTask that was still running now holds a stale
reference to your activity, because the restarted activity will be an
entirely different object in memory (and it will go through
onCreate(), as if the activity had started for the first time). I’m
not entirely sure whether AsyncTask will actually post back the data
to the old activity object (if it was a weak reference, it may already
have been garbage collected), but in any case, your “new” activity
will never see it, because it’s a different instance.

Now, one could argue: well, just do all the work again, like, re-send
the request or whatever job was running. Yes, you could do that. But
that’s wasteful and, really, makes you feel stupid, no? Plus, if the
user triggers a web service request, then flips the screen, decides
that this wasn’t helpful, and flips it back, then your request is
being sent 3 times in parallel. Is that what you want? Probably not.

BetterAsyncTask to the Rescue

Thanks to Droid-Fu, there’s a solution to this: BetterAsyncTask! (I’m
a lazy person, and I couldn’t come up with a better name). It behaves
exactly like AsyncTask (in fact, it is an AsyncTask), but it does some
extra work for you: first and foremost, it keeps track of the active
instance of the context that launched it, and if that instance should
change, it will post the data back to the new instance. In other
words, you can dispatch your task, flip the screen back and forth
mentally, and BetterAsyncTask will still post the task’s result back
to whatever activity instance is alive at the time it finishes. In
other words, the task is only ever run once, regardless whether the
context in which it was launched died while it was running or not.

http://github.com/kaeppler/droid-fu

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to