Reputation: 861
I have an application that runs in the background and displays an error message via the notifications system. This notification has a pendingIntent that leads back to the app's main screen. On this main screen, I have set launchmode="singleTask". As I understand it from the Android Dev Guide, this should mean that my main activity will only ever have one instance.
However, if the user is viewing that activity at the time (or another one within the app), and goes and touches the notification to clear it, it goes ahead and puts another copy of the activity on the stack, so if I hit the back button, it will return to the main screen again (from the main screen).
Why would it be doing this?
Upvotes: 16
Views: 19269
Reputation: 95578
It sounds to me like you want the following behaviour if the user selects the notification:
If the app is already running in a task, just bring that task to the foreground and show whatever activity happens to be on top of the activity stack.
If the app isn't already running in a task, launch the main activity of the app in a new task.
If this is the behaviour you are after, you don't need (or want) any special launch mode. See my answer to this question: Notification to restore a task rather than a specific activity?
This should do what you want.
Upvotes: 2
Reputation: 9719
You are almost answering your own question in the question ;)
Try using:
android:launchMode="singleInstance"
Be warned though, if you are doing anythign like startActivityForResult - you will never receive the result!
Update:
If you want to receive new intent data using onNewIntent:
public void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
setIntent(intent);
}
That will change the intent the application returns when you use getIntent() to the new intent which was passed to onNewIntent.
Upvotes: 19
Reputation: 80340
Check the docs of activity.launchmode.
I had a similar problem and solved it with android:launchMode="singleInstance"
.
Upvotes: 3