Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


OnCreate () después de finish () en onStop ()

Tengo una actividad de Android que llama a finish() dentro de su onStop() así que cuando cambio a otras actividades (incluyendo el menú principal), la actividad se cerrará. Hasta este punto, todo funciona como se esperaba.

Sin embargo, cuando vuelvo a ejecutar la aplicación de nuevo, (a veces, no siempre) me doy cuenta de que la aplicación se ejecuta con el mismo PID que el anterior y llama a onCreate() nuevo. No vi ninguna llamada a onRestart() así que asumo que onCreate() llamada se realiza directamente después de onStop() , que es algo que viola el lifecyce de la actividad . Cuando la aplicación utiliza un nuevo PID, puedo entender por qué onCreate() se llama, es porque este es el comienzo de la actividad.

  • ¿Cuáles son las posibilidades de obtener este código de error 3 en la compra de InApp?
  • Android Studio: Importación de proyecto al proyecto existente
  • YouTubePlayerSupportFragment en una aplicación de una sola actividad con cambio de orientación
  • Android: ¿Cómo liberar recursos cuando termina la aplicación?
  • Listview Desplácese al final de la lista después de actualizar la lista
  • Android, ¿puedo poner AsyncTask en una clase separada y tener una devolución de llamada?
  • ¿Alguien sabe por qué sucede esto?

    Un poco sobre la aplicación que estoy desarrollando: Esta es una aplicación de Unity + Vuforia + Android. Creo una actividad personalizada porque necesito crear una interfaz de usuario nativa en Android (en lugar de en Unity).

    Encontré un problema similar registrado en el proyecto de Android: http://code.google.com/p/android/issues/detail?id=15331 pero no estoy seguro si la causa es la misma o no.

    Actualización : Por lo que veo desde el registro, después de la llamada finish() , no hay ninguna llamada a onDestroy() . Sin embargo, si el problema que mencioné sucede (la actividad se inicia usando el mismo proceso), hay una llamada a onDestroy() al principio de la actividad.

    Actualización : Lo siento por la última actualización. Aquí muestro un extracto del logcat.

     ## First run I/ActivityManager( 265): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=the.app/the.app.UnityAriusActivity bnds=[238,115][351,273] } from pid 423 I/ActivityManager( 265): Start proc the.app for activity the.app/the.app.UnityAriusActivity: pid=1686 uid=10013 gids={3003, 1006, 1015} D/arius ( 1686): UnityAriusActivity: onStart D/arius ( 1686): UnityAriusActivity: onResume ## Home button is pressed I/ActivityManager( 265): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.sonyericsson.home/.HomeActivity } from pid 265 D/arius ( 1686): UnityAriusActivity: onPause D/arius ( 1686): UnityAriusActivity: onStop ## Second run I/ActivityManager( 265): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=the.app/the.app.UnityAriusActivity bnds=[238,115][351,273] } from pid 423 ## Same process, onStart is called again D/arius ( 1686): UnityAriusActivity: onStart D/arius ( 1686): UnityAriusActivity: onResume I/ActivityManager( 265): Displayed the.app/the.app.UnityAriusActivity: +500ms D/Unity ( 1686): Creating OpenGL ES 2.0 context (RGB16 565 16/0) W/IInputConnectionWrapper( 423): showStatusIcon on inactive InputConnection I/QCAR ( 1686): onSurfaceCreated ## Strangely, there's an onDestroy here D/arius ( 1686): UnityAriusActivity: onDestroy ## Unity apparently kills the process from its onDestroy I/Process ( 1686): Sending signal. PID: 1686 SIG: 9 I/ActivityManager( 265): Process the.app (pid 1686) has died. 

    El problema es que hay un onDestroy() después de onStart() en la segunda ejecución. Mi actividad es básicamente una subclase de actividad Vuforia / QCAR que también es una subclase de actividad de Unity. Por lo tanto, dentro de mi onDestroy() , hago una llamada a la superclase '( super.onDestroy() ) y también lo mismo para los otros métodos que anular.

    Si miré la Unity y Vuforia / la biblioteca de Android de QCAR (era curioso así que los descompilé – sí esto puede no estar bien), dentro de Unity onDestroy() , Unity intenta matar su propio proceso (que es el proceso de aplicación) .

     Process.killProcess(Process.myPid()); 

    Así que, cuando esto sucede, mi aplicación acaba de apagar de nuevo. Si la segunda ejecución utiliza un proceso diferente, esa extraña onDestroy() no sucede.

    También he intentado el método nohistory. Pero la misma cosa todavía sucede 🙁 Cuando la segunda ejecución utiliza el mismo proceso, una tarde onDestroy() aparecerá y entonces el proceso es matado por Unity.

  • ¿Cómo cambiar el comportamiento del método mediante la reflexión?
  • Cómo cambiar el color predeterminado en todos los textos en mi aplicación de Android?
  • RunOnUiThread vs Looper.getMainLooper (). Publicar en Android
  • Códigos de error de GCM
  • Android: use debugmode en la galaxia s2
  • Native Android WebRTC aplicación de desarrollo
  • 4 Solutions collect form web for “OnCreate () después de finish () en onStop ()”

    Está cometiendo un error comprensible, pero crítico al suponer que una nueva actividad debe ejecutarse en un proceso nuevo. Ese no es el caso en android – puede tener el onCreate () de una nueva instancia de actividad ocurre en un proceso que se ha mantenido alrededor después de alojar una instancia de actividad anterior.

    Esto puede hacer que cualquier cosa que es estática con respecto a un proceso (especialmente, aunque no exclusivamente en el código nativo) desconcertantemente poco fiable.

    Debido a que la actividad que se está iniciando es nueva, no recibirá un onRestart () – que sucedería sólo si estaba reiniciando una actividad existente.

    ¿Por qué no acaba de establecer noHistory="true" en la entrada de manifiesto de la actividad? Entonces usted no tiene que preocuparse de terminar manualmente la actividad en onStop ().

    Buscar noHistory en http://developer.android.com/guide/topics/manifest/activity-element.html

    O bien, establezca FLAG_ACTIVITY_NO_HISTORY en su startActivity() . http://developer.android.com/reference/android/content/Intent.html#FLAG%5FACTIVITY%5FNO%5FHISTORY

    En la documentación de su enlace, la descripción de onDestroy es:

    La última llamada que reciba antes de que su actividad sea destruida. Esto puede suceder ya sea porque la actividad está terminando (alguien llamó finish () en ella o porque el sistema está destruyendo temporalmente esta instancia de la actividad para ahorrar espacio). Puede distinguir estos dos escenarios con el método isFinishing ().

    Mientras que para onStop es:

    Se llama cuando la actividad ya no es visible para el usuario, porque otra actividad se ha reanudado y está cubriendo esta. Esto puede suceder ya sea porque se está iniciando una nueva actividad, ya se está presentando una existente, o ésta está siendo destruida. Seguido por onRestart () si esta actividad vuelve a interactuar con el usuario, o onDestroy () si esta actividad se va.

    Esto significa que finish() llama a onDestroy no onStop, por lo que cuando se reinicia la actividad, onCreate debe ser llamado, ya que su llamada a finish() dentro onStop forzará onDestroy a ejecutar.

    Estoy corriendo en un comportamiento similar: onDestroy extrañamente llamado después onCreate / onStart / onResume, cuando se inicia la actividad. No tengo una confirmación definitiva, pero mi sentimiento es que la llamada onDestroy corresponde a la actividad anterior, no la nueva. Pero por alguna razón, su ejecución se retrasa hasta que el proceso se reactive de nuevo (al iniciar una nueva actividad).

    Creo que esto se debe a llamar "finish ()" de onStop. He notado en mis registros que el gerente de actividades se queja de que la actividad informó de detener, pero ya no se detiene (es en realidad el acabado). Así que me estoy preguntando si este líos con el estado de las actividades de gestión de actividades de mi actividad está en.

    En su caso, el resultado final es que todo el proceso se pierde, debido a la llamada onDestroy. A medida que se inicia tu nueva actividad en el mismo proceso que el anterior, tu aplicación sale inmediatamente.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.