Actividad PopUp comienza de nuevo cuando se inicia desde "aplicaciones recientes"

Tengo una actividad PopUp que se inicia cuando AlarmManager recibe una alarma.

AlarmReceiver extiende WakefulBroadcastReceiver:

@Override public void onReceive(Context context, Intent intent) { Intent service = new Intent(context, AlarmService.class); service.putExtras(intent); // Start the service, keeping the device awake while it is launching. startWakefulService(context, service); } 

AlarmService extiende IntentService:

 @Override protected void onHandleIntent(Intent intent) { Intent i = new Intent(); i.setClass(this, PopUpActivity.class); startActivity(i); AlarmReceiver.completeWakefulIntent(intent); } 

PopUpActivity:

 @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(LayoutParams.FLAG_NOT_TOUCH_MODAL, LayoutParams.FLAG_NOT_TOUCH_MODAL); getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH); setContentView(R.layout.layout_dialog); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ClientConstants.WAKE_LOCK_NOTIFICATION); // Acquire the lock wl.acquire(); if (canVibrate){ vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(new long[]{ 0, 200, 500 },0); } if (canRing){ mediaPlayer = new MediaPlayer(); try { mediaPlayer.setDataSource(this, getAlarmUri()); final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) { mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); mediaPlayer.prepare(); mediaPlayer.start(); } } catch (IOException e) { } } findViewById(R.id.dialog_ok_button).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { stopRinging(); finish(); } }); // Release the lock wl.release(); } private void stopRinging(){ if (canRing && mediaPlayer.isPlaying()) mediaPlayer.stop(); if (canVibrate){ vibrator.cancel(); } } 

PopUpActivity se inicia desde un administrador de alarmas. Si se inicia PopUpActivity cuando la aplicación no es la aplicación activa y si el usuario presiona "botón OK", la actividad desaparece. No hay nada malo aquí hasta ahora. El problema es que si el usuario abre la pantalla de aplicaciones recientes y selecciona la actividad, se reinicia una nueva PopUpActivity . ¿Cómo puedo deshacerme de este problema?

5 Solutions collect form web for “Actividad PopUp comienza de nuevo cuando se inicia desde "aplicaciones recientes"”

Cuando declare su PopupActivity en su manifiesto, asegúrese de incluir android:noHistory="true" . Esto significa que tan pronto como abra "recents", la actividad emergente se olvidará y volverá a donde estaba antes cuando vuelva a abrir la aplicación.

Cuando el usuario presiona el botón Ok , se está llamando al método Activity.finish() . Esto resulta en la Activity está siendo destruida. Por lo tanto, cuando el usuario selecciona la aplicación de la sección de la aplicación reciente, la Activity se crea de nuevo.

En caso de que no desee destruir la Activity pero desea ponerla en segundo plano, reemplace el método Activity.finish () por Activity.moveTaskToBack (boolean) .

 findViewById(R.id.dialog_ok_button).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { stopRinging(); moveTaskToBack(true); } }); 

Debe manejar escenarios en los que se reinicie la actividad después de haber sido eliminado debido a la escasez de memoria y los cambios de configuración.

Puede establecer FLAG_ACTIVITY_SINGLE_TOP en los indicadores de Iniciación de inicio de Activity para asegurarse de que la nueva instancia no se crea si ya se está ejecutando en la parte superior de la pila del historial.

En su manifiesto, en la sección de su Activity , pruebe esto:

 <activity> android:launchMode="singleTask" </activity> 

Si quieres que tu Activity no aparezca en la lista de aplicaciones recientes , prueba

 <activity> android:excludeFromRecents="true" </activity> 

Espero que esto ayude.

Cuando presione el botón OK, finish() la actividad y seleccionándola nuevamente desde el historial, obviamente volverá a crearla.

Lo que debe hacer es ocultar esta actividad de alarma de history / recents usando android:excludeFromRecents="true"

Y use launchMode = "singleInstance" con esto para que android nunca pueda hacer otras dos instancias de esta actividad al mismo tiempo.

Puede evitar este problema simplemente agregando indicador a la intención que inicia la actividad que indica que no se mostrará en las tareas recientes:

 Intent i = new Intent(); i.setClass(this, PopUpActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); startActivity(i); 

La configuración de Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS hará su PopupActivity invisible en las tareas recientes.

  • Comunicación entre BroadcastReceiver y Activity - android
  • TIMEZONE_CHANGED intención que se recibe cada pocos segundos
  • El servicio no se inició en BOOT COMPLETE
  • ¿Cómo encontrar los dispositivos bluetooth disponibles en el rango?
  • Cómo modificar la vista de la pantalla de llamadas entrantes y salientes en android
  • Java.lang.SecurityException: Permiso Negación: no se permite enviar broadcast android.intent.action.MEDIA_MOUNTED en KitKat solamente
  • SMS Broadcast Receiver no recibe el mensaje de texto
  • ¿Cómo construir una aplicación de Android que avisa al usuario, incluso si es asesinado?
  • Registro de Receptor de Difusión en Manifiesto vs. Actividad
  • Cuando los incendios de Android ACTION_BATTERY_LOW
  • ¿Los usuarios de Samsung Glaxy S4 informan que el receptor BOOT_COMPLETED no funcionará?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.