Actualmente estoy desarrollando una aplicación con solicitudes de red. Sin embargo, a pesar de que solicité una vez, llegaron dos resultados. (Comprobado con logcat) Después de eso, comencé a estudiar sobre Android Lifecycles y agregué registros a TODAS las funciones de Lifecycle:
Ej.) onResume()
override fun onResume() { Log.d("LIFECYCLE", "OnResume Started") super.onResume() Log.d("LIFECYCLE", "OnResume Ended") }Después de imprimir el logcat, obtuve el siguiente resultado:
1. D/LIFECYCLE: OnCreate Started 2. W/<appname>: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (unsupported, reflection, allowed) 3. W/<appname>: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (unsupported, reflection, allowed) 4. D/LIFECYCLE: OnCreate Ended 5. D/THREAD: Thread Started -> The network request thread 6. W/<appname>: Accessing hidden method Ljava/lang/invoke/MethodHandles$Lookup;-><init>(Ljava/lang/Class;I)V (unsupported, reflection, allowed) 7. D/LIFECYCLE: OnStart Started 8. I/ActivityThread: Schedule relaunch activity: <PACKAGE_NAME>.activities.MainActivity 9. D/LIFECYCLE: OnStart Ended 10. D/LIFECYCLE: OnResume Started 11. D/LIFECYCLE: OnResume Ended 12. W/<appname>: Accessing hidden method Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; (unsupported,core-platform-api, reflection, allowed) 13. W/<appname>: Accessing hidden method Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V (unsupported,core-platform-api, reflection, allowed) 14. W/<appname>: Accessing hidden method Ldalvik/system/CloseGuard;->warnIfOpen()V (unsupported,core-platform-api, reflection, allowed) 15. D/LIFECYCLE: OnPause Started 16. D/LIFECYCLE: OnPause Ended 17. D/LIFECYCLE: OnDestroy Started 18. D/LIFECYCLE: OnDestroy Ended 19. D/LIFECYCLE: OnCreate Started 20. D/LIFECYCLE: OnCreate Ended 21. D/THREAD: Thread Started 22. D/LIFECYCLE: OnStart Started 23. D/LIFECYCLE: OnStart Ended 24. D/LIFECYCLE: OnResume Started 25. D/LIFECYCLE: OnResume Ended 26. D/THREAD: Thread Ended 27. D/THREAD: Thread Ended ... D/Thread en logcat es el hilo de solicitud de red que hice en onCreate()
Como puede ver en la línea 8, hay un registro de ActivityThread donde dice "Programar actividad de relanzamiento". Sin embargo, no reinicié ni relancé mi actividad. La aplicación funciona sin problemas sin ninguna animación de reinicio ni retrasos mientras se imprime el registro.
Probé soluciones como agregar verificación nula a savedInstanceState y ejecutar el subproceso de red cuando es nulo, pero de alguna manera los resultados de la solicitud de red y los comandos de cambio de interfaz de usuario que hice dentro del subproceso se reflejan en la segunda solicitud , por lo que esto no fue bueno.
LA PARTE MÁS IMPORTANTE : para encontrar qué salió mal, abrí un emulador y probé mi aplicación. Sorprendentemente, cuando abro la aplicación con el emulador, no hay registro de relanzamiento de actividad ni respuesta duplicada. Funciona perfectamente como lo programé.
El dispositivo con el que tuve problemas es Pixel 6 Pro (dispositivo físico). Quiero que mi aplicación funcione en este dispositivo típico.
¿Cómo puede ser diferente? ¿Por qué está pasando esto? ¿Hay alguna solución para no relanzar la actividad por sí sola?
Puede intentar envolver su hilo de red en savedInstanceState != null . Tuve el mismo problema en Pixel 6 Pro con una llamada fragmentada al iniciar la actividad. La actividad se reiniciará de todos modos, pero en mi caso el fragmento no. Tal vez esto también funcione para ti.