I'm having a similar issue, but related to PendingIntents via notifications. http://groups.google.com/group/android-developers/browse_thread/thread/56a0c58dc6e1b0a1#
<http://groups.google.com/group/android-developers/browse_thread/thread/56a0c58dc6e1b0a1#>Like you, I feel I understand the task concept laid out in docs (that fundamentals documentation is very good) but but then doubt it when I try to put things into practice. Setting android:launchMode="singleTask" works for me but has the unwanted side effects described in the link above. Tom. 2009/5/30 Michael Elsdörfer <mich...@elsdoerfer.info> > > I've read through the Application Fundamentals three times today (and > I had done so before), but I still can't quite wrap my ahead around > the task concept. Or I guess I thought I understood it, but usually, > the results I am seeing don't match up to what I would expect to > happen (maybe a tool to see the current tasks/activities etc. for > debugging purposes would be a nice addition). > > I have multiple widgets from my provider in the Launcher desktop, and > each is using a PendingIntent with a different URI as data (so they > should be separate intents) to open an Activity. > > I want there to be only once concurrent instance of this Activity that > the user can access. So clicking the widget (1) , pressing HOME (2), > clicking a different widget (3), pressing BACK (4) should bring the > user back to the Desktop. > > Now I did manage to do this using launchMode="singleTask" - the > existing instance is brought to the top, onNewIntent() is called and I > am pretty satisfied with it. > > However, supposedly there are other ways to achieve an equivalent > effect (say with having the activity restarted), and I'd like to > understand why I don't seem to be able to get them to work: In every > case, instead of seeing the home screen after step (4) (after pressing > BACK), I see the *previous* instance of the Activity. > > For example, if I read this correctly: > > "There's another way to force activities to be removed from the stack. > If an Intent object includes the FLAG_ACTIVITY_CLEAR_TOP flag, and the > target task already has an instance of the type of activity that > should handle the intent in its stack, all activities above that > instance are cleared away so that it stands at the top of the stack > and can respond to the intent. If the launch mode of the designated > activity is "standard", it too will be removed from the stack, and a > new instance will be launched to handle the incoming intent." > http://developer.android.com/guide/topics/fundamentals.html > > Then simply using using the following code to start my Activity from > my widget should do what I want, no? > > Intent detailIntent = new Intent(context, ViewImageActivity.class); > detailIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); > PendingIntent pending = PendingIntent.getActivity(context, 0, > detailIntent, 0); > > So in (3) My activity should be launched using FLAG_ACTIVITY_NEW_TASK > by the launcher, which due to process affinity would find the existing > task (which would consist of a single instance of my Activity), and > launch the new instance on top of it. This explains what I am seeing. > Why doesn't FLAG_ACTIVITY_CLEAR_TOP cause the existing instance in the > task to be replaced? > > Even setting android:launchMode explicitely to "standard", as > mentioned in the doc quote above, this doesn't seem to change things. > > I also tried android:finishOnTaskLaunch="true", but the behaviour is > the exact same was just described with FLAG_ACTIVITY_CLEAR_TOP (which > seems to be the exact same as when doing neither and really starting > an activity without any special attributes). > > I should mention that If I click the same widget in (3) as I clicked > in (1), i.e. using the same PendingIntent twice, I do get the previous > instance brought to the front (not restarted), but again, regardless > of whether FLAG_ACTIVITY_CLEAR_TOP or finishOnTaskLaunch are being > used. > > I find this especially strange since the docs about tasks don't seem > to mention the intent itself being relevant at all. Application > Fundamentals does at one point say "For the default "standard" mode, a > new instance is created to respond to every new intent", but it's not > clear what "new intent" means then. Is triggering a PendingIntent > multiple times through a widget not multiple "new" intents then? > > I also tried various combinations of the other related options, but > pretty much got nowhere. > > Can anybody make sense of this? > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---