You can set android:launchMode to singleTop to avoid having multiple instances of the activity created on top of each other. However, you probably want to sit down and think about how this notification should interact with the application in all of its states -- both while the user is in it, and when they are elsewhere. This is probably one of most challenging areas of Android app design, and still has some issues with even some of the standard apps.
Anyway, there are two main approaches I would recommend taking: (1) If your app consists of a single main activity that the user naturally wants to return to, then have the notification intent launch that with the standard intent (MAIN action, LAUNCHER category), with FLAG_ACTIVITY_CLEAR_TOP so that the user will return to this instead of whatever other activity was on top of it. The Gmail application is mostly a good example of this, where the notification brings you to the main inbox activity, regardless of whether you were last viewing a message. (2) Otherwise, have the notification launch a special activity that tells the user the full information associated with it, with facilities to launch in to the actual application in whatever state is appropriate. This special activity, once the user selects something in its UI, will launch the desired regular app activity with FLAG_ACTIVITY_NEW_TASK, allowing it to be placed on top of the app in whatever state it currently is in, or use other flags or such to control how the user enters the current app state. The Calendar application is a good example of this -- note how selecting its notification brings you to a summary of all of the unhandled notifications, allowing you to tap on one to view it in the app. One of the goals of this is that you really want to design things so that when the user selects your notification, they can press BACK to return to whatever they were previously doing -- NOT to have that go back through your app's old history stack however they last left it. Btw, one more thing, I notice in your app manifest that you are not using multiple processes, so you are not really doing "IPC" with the service. This is good. In fact you don't actually need that .aidl interface at all -- you can use the method shown in the LocalService sample code to simplify your app a fair amount in this area: http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceController.html http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/index.html <http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/index.html> On Sun, Dec 13, 2009 at 8:40 AM, Christophe Vandeplas < [email protected]> wrote: > Hello, > > > I'm having an issue with inter-process communication with a Service > and Notifications > > > The structure of my application is as follow: > - ListActivity (TunnelDroid), once the user presses a listitem it will > start a Service. > The ListActivity is binded to the service for intra-process communication > > - Service (TunnelManagerService): running in the background. This > service will add a (permanent) Notification in the statusbar. > Using a Handler I sometimes need to communicate with the ListActivity > (to show GUI Dialogs) > > - Notification: Once this notification is clicked it should open the > ListActivity. > > > To add the action when the user touches the notification I use the > following code: > > notificationIntent.setClassName("net.sourceforge.tunneldroid","net.sourceforge.tunneldroid.TunnelDroid"); > Then I use the intent to create the notification. > > Unfortunately a new Intent is opened. When I press the back button the > original ListActivity is shown. > So I have two instances of my same class/list. > > > How could I make sure the original ListActivity is opened when the > user touches the Notification? > > It's OK for me if the original ListActivity was previously destroyed, > but I cannot have two instances. > The problem is that the Handler in the Service has a reference to the > ListActivity (PARENT_ACTIVITY), so if another instance is created I > have invalid references. I could overwrite the PARENT_ACTIVITY, but > then when the user presses the back button I have an instance with no > correct link to my Service resulting in a crash/nullpointer. > > The complete source can be found here: > > http://tunneldroid.svn.sourceforge.net/viewvc/tunneldroid/tunneldroid/src/net/sourceforge/tunneldroid/ > > Attached you can find a drawing of (most of the) inter-process > communication. > > > Could someone point me in the right direction? > > > Thanks > > Christophe > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected]<android-developers%[email protected]> > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en -- Dianne Hackborn Android framework engineer [email protected] Note: please don't send private questions to me, as I don't have time to provide private support, and so won't reply to such e-mails. All such questions should be posted on public forums, where I and others can see and answer them. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

