android - for - La aplicación se reinicia completamente cuando se inicia con un ícono presiona el selector
fastest android launcher (11)
Estoy en el proceso de tratar de hacer una versión de lanzamiento de mi primera aplicación de Android para enviar a algunos probadores. Sin embargo, me encontré con un problema. Cuando sale de la aplicación y luego la vuelve a ingresar al iniciarla mediante su icono, reinicia toda la aplicación en lugar de volver a su ubicación anterior. Esto ocurre incluso si vuelve a ingresar justo después de salir. Sin embargo, no sucede si sostengo el botón Inicio y lo abro a través de la lista de aplicaciones recientes.
He buscado en línea a otros que tienen este problema y hay algunos, pero nadie ha tenido una respuesta sólida sobre por qué les está sucediendo. Se ha sugerido en las preguntas anteriores que establezca el modo de inicio de sesión en singletask o singleinstance en el archivo de manifiesto, pero eso no me ha ayudado, y además, por lo que entiendo, el comportamiento predeterminado de android es volver al estado anterior de la tarea en esta situación, así que no sé por qué necesitaría opciones de manifiesto especiales para hacerlo.
Lo más extraño de este problema es que si uso eclipse y el depurador para poner la aplicación en mi teléfono, este problema no ocurre. Ni siquiera necesito estar conectado al depurador, parece que mientras tenga una versión de depuración de la aplicación, el problema no ocurrirá. Pero si utilizo una versión de lanzamiento (la creo usando las herramientas de Android - Exportar la opción del menú del paquete de aplicaciones firmado en Eclipse), el problema ocurre. Si alguien tiene alguna idea de lo que está causando esto, me encantaría escuchar tus pensamientos.
Agregue esto a su primera actividad:
if (!isTaskRoot()) {
finish();
return;
}
super.onCreate(savedInstanceState);
Cuando presiona el botón Atrás en Android, se invoca el método onDestroy
(en lugar de presionar el botón de inicio, donde solo se invoca el método onPause()
).
Si necesita que su aplicación continúe donde se quedó, guarde el estado de la aplicación en su método onDestroy()
y cargue ese estado en el método onCreate()
.
Es el comportamiento predeterminado en Android. Para las compilaciones de depuración funciona de manera diferente por alguna razón. Se puede resolver agregando android:launchMode="singleInstance"
a la actividad, que desea reiniciar después de iniciar desde el ícono.
Hasta ahora, descubrí que se trata de un problema basado en cómo lo instala en su dispositivo real, específicamente:
- Si simplemente copia y pega la APK en el almacenamiento local de su dispositivo e instálela desde el dispositivo, independientemente de si está firmada o no, o de la carpeta bin, muestra este comportamiento, la aplicación se reinicia desde el ícono de menú.
Si lo instala usando una de las siguientes opciones, este problema no aparece:
Vaya a sdk / tools / usando un terminal o símbolo del sistema y luego escriba
adb install <FILE PATH OF .APK FILE>
En Linux, escribe:
./adb install <FILE PATH OF .APK FILE>
Simplemente ejecuta tu proyecto desde Eclipse.
Me gustaría saber si existe alguna forma de distribuir los archivos APK correctos para las pruebas beta. Ya traté de exportar un APK firmado, porque cuando copias y pegas un APK e lo instalas manualmente, muestra el comportamiento falso.
Actualizar:
Encontré una solución. Sigue estos dos pasos:
- Establezca
android:launchMode="singleTask" = true
para todas las actividades de su aplicación en AndroidMainifest.xml dentro de la etiqueta de actividad . Coloque este código en
onCreate()
su actividad deonCreate()
.if (!isTaskRoot()) { final Intent intent = getIntent(); final String intentAction = intent.getAction(); if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) { finish(); return; } }
Este comportamiento es un error en Android. No es un caso especial.
Intenta usar android:alwaysRetainTaskState
como se muestra en el siguiente ejemplo:
<activity
android:name="com.jsnider.timelineplanner.MainActivity"
android:alwaysRetainTaskState="true"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Para mí, la solución añadía LaunchMode = LaunchMode.SingleTop
a mi atributo Activity sobre la actividad principal:
/// <summary>
/// The main activity of the application.
/// </summary>
[Activity(Label = "SilhuettePhone",
Icon = "@drawable/icon",
Theme = "@style/MainTheme",
MainLauncher = true,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation,
ScreenOrientation = ScreenOrientation.Portrait,
LaunchMode = LaunchMode.SingleTop,
WindowSoftInputMode = SoftInput.AdjustResize)]
Puede intentar configurar android:alwaysRetainTaskState="true"
para su actividad de iniciador en AndroidManifest.xml.
<activity
android:name=".YourMainActivity"
android:alwaysRetainTaskState="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Para más detalles, puede ver https://developer.android.com/guide/topics/manifest/activity-element.html#always
Puede usar launchMode como singleTop para la actividad del iniciador en AndroidManifest.xml
<activity
android:name="<YOUR_ACTIVITY>"
android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Todas las soluciones anteriores no funcionaron consistentemente en todos mis dispositivos. Funcionó en algunos Samsung, pero no en todos.
La causa del problema para mí fue la instalación manual de la APK.
Tuve el mismo problema con una aplicación y resolví este comportamiento agregando la "android:launchMode="singleTop""
lugar de "android:launchMode="singleTask""
en la declaración <activity>
de tu archivo AndroidManifest.xml. Espero que esto ayude a alguien.
// To prevent launching another instance of app on clicking app icon
if (!isTaskRoot()
&& getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
&& getIntent().getAction() != null
&& getIntent().getAction().equals(Intent.ACTION_MAIN)) {
finish();
return;
}
escriba el código anterior en su actividad de inicio antes de llamar a setContentView. Esto solucionará el problema