Excellent idea Federico, However my AsyncTask fetches a RingTone object (com.android.RingTone) and I have no way of passing this object from my Service to my Activity?
On Fri, Sep 10, 2010 at 11:36 AM, Federico Paolinelli <fedep...@gmail.com>wrote: > You could probably move the async task to a service, and broadcast all > your stuff when you finish. > If your activity listens for the broadcast, it won't matter if the > activity itself started the service, or if it was started by another > activity (of the same kind). > > Federico > > On Sep 10, 12:14 pm, Donal Rafferty <draf...@gmail.com> wrote: > > Thanks for that Shawn, but I'm looking for a solution that doesn't > involve > > external libraries. > > > > On Fri, Sep 10, 2010 at 10:45 AM, Shawn Brown < > big.coffee.lo...@gmail.com>wrote: > > > > > > Has anybody got any idea why this would be happening? > > > > > Well... from > > >http://brainflush.wordpress.com/2009/11/16/introducing-droid-fu-for-a. > .. > > > > > 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<android-developers%2bunsubscr...@googlegroups.com> > <android-developers%2bunsubscr...@googlegroups.com<android-developers%252bunsubscr...@googlegroups.com> > > > > > For more options, visit this group at > > >http://groups.google.com/group/android-developers?hl=en > > -- > 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<android-developers%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > -- 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