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
-~----------~----~----~----~------~----~------~--~---

Reply via email to