2010-02-24 15 views
26

Así que, actualmente estoy mostrando una notificación. Cuando el usuario hace clic en esta noticiation, la aplicación se inicia. La notificación persiste para indicar que el servicio se está ejecutando en segundo plano.Actividad de inicio a través de notificación: evitar actividades duplicadas

Intent notificationIntent = new Intent(context, LaunchActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
mNotificationManager.notify(1, notification); 

Sin embargo, he detectado un caso donde aparece un error. Si el usuario inicia la aplicación haciendo clic en el ícono normal, y mientras la actividad se está ejecutando, hace clic en la notificación, luego se inicia una nueva actividad sin que la anterior salga, y la última se encuentre encima de la anterior. Y eso no es todo: más clics en la notificación creará actividades adicionales y las colocará sobre las que ya se están ejecutando. ¿Cómo puedo prevenir esto? ¿Hay algún cheque que hacer para ver si se está mostrando o cargando cierta actividad?

Respuesta

10

Cuando se utiliza el lanchMode="singleTask", si una instancia de su actividad ya existe, Android no se vuelve a crear la actividad, pero el lanzamiento con el método onNewIntent().

Como se documenta en Android:

El sistema crea la actividad en la raíz de una nueva tarea y rutas de la intención de la misma. Sin embargo, si ya existe una instancia de la actividad, el sistema enruta el intento a la instancia existente a través de una llamada a su método onNewIntent(), en lugar de crear uno nuevo.

Android documentation for activity mode

2

Como las dos respuestas han mencionado anteriormente, usted desea establecer el modo de lanzamiento de la aplicación que se define en la definición de la actividad en el manifiesto:

<activity 
    android:name="com.company.ActivityName" 
    android:launchMode="singleTask"> 
</activity> 

Además, Es posible que desee tener en cuenta que, a pesar de que FLAG_ACTIVITY_SINGLE_TOP es una bandera de intención válida, no hay indicadores de intención equivalentes para singleTask o singleInstance.

Consulte la sección launchMode para más detalles sobre las diferentes opciones de modo de lanzamiento: http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

+1

es FLAG_ACTIVITY_NEW_TASK no equivalente a singleTask? – CopsOnRoad

Cuestiones relacionadas