oreo notes android android-intent android-alertdialog android-lifecycle android-7.1-nougat

android - notes - El ciclo de vida de la actividad cambió con API 25(7.1.1)



android api 24 (2)

Parece que los diferentes no están en la versión de Android.

Si habilita la marca "No mantener actividades" en la configuración de los desarrolladores, el ciclo de vida será el siguiente:

onCreate onResume * perform startActivityForResult onPause onDestroy * returning result onCreate onResume onPause onNewIntent onResume

Porque onNewIntent siempre entra en estado de pausa.

En mi actividad principal, tengo un cuadro de diálogo que se abre si se establece un indicador en la intención. Si el diálogo fue creado, se descarta en onPause()

@Override public void onPause() { super.onPause(); if (_dialog!= null) { _dialog.dismiss(); _dialog= null; } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intentContainsFlag) { _dialog = ....; _dialog.show(); } }

El cuadro de diálogo se debe abrir si se presiona un botón del titular de ListView y se crea un URI de intención:

bttn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // The URL scheme is registered in the intent filter String intentString = "http://open.example.com/myParameters"; v.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(intentString))); } });

El AndroidManigfest contiene:

<activity android:name=".MainActivity" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="landscape" > <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="http" android:host="open.example.com" android:pathPattern=".*"/> <data android:scheme="https" android:host="open.example.com" android:pathPattern=".*"/> </intent-filter> ....

Las versiones sdk están configuradas para

minSdkVersion = 19 targetSdkVersion= 22 compileSdkVersion = 23 buildToolsVersion = 23

En Android <7.1.1, todo funciona como se esperaba: se llama a onNewIntent() y el diálogo está visible.

Pero en 7.1.1. dispositivos a los que se llama onNewIntent de onNewIntent , luego directamente onPause y onResume . Esto significa que la actividad se abre / sale a primer plano, pero el diálogo se cerró inmediatamente.

Una solución posible es cerrar el diálogo en onStop() pero no entiendo por qué sucede esto en Android 7.1.1. ¿Hubo algún cambio en el ciclo de vida ?


Pero en 7.1.1. dispositivos a los que se llama onNewIntent de MainActivity, luego directamente onPause y onResume. Esto significa que la actividad se abre / sale a primer plano, pero el diálogo se cerró inmediatamente.

El marco de Android puede destruir su actividad cada vez que esté en segundo plano o backstack, y debe escribir sus actividades para que se comporten correctamente cuando esto suceda. mira este :

No mantenga las actividades en el menú Opciones de Desarrollador. Cuando esta opción está habilitada, el sistema operativo Android destruirá una actividad tan pronto como se detenga. Está destinado a ayudar a los desarrolladores a depurar sus aplicaciones. Por ejemplo, puede simular el caso de que Android mate una actividad en segundo plano debido a la presión de la memoria. En el uso normal, no se recomienda activar esta opción porque puede provocar problemas inesperados en las aplicaciones, como bloqueos, forzar el cierre y reinicios.

Su propio diálogo hace que su actividad se pause y luego se cierre.