OnActivityResult () llamado prematuramente

Comienzo la actividad (descendiente de PreferenceActivity) de mi actividad de trabajador como sigue:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1458) loadInfo(); } void showSettingsDialog() { startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458); } 

La clase MyConfigure NO tiene ninguna llamada a setResult (). De hecho, la clase MyConfigure no tiene ningún código excepto OnCreate donde carga las preferencias usando addPreferencesFromResource.

Ahora onActivityResult se llama con requestCode de 1458 prematuramente, justo después de ejecutar la actividad MyConfigure. Probado en los emuladores 1.6 y 2.1, así como en el dispositivo 2.1. ¿Hay una llamada a setResult () enterrada en alguna parte de PreferenceActivity? ¿O de qué otra manera se puede explicar esta llamada prematura?

Esto se arregla cambiando el modo de singleTop a singleTop :

  <activity android:name=".MainActivity" android:launchMode="singleTop"> 

Hay un error / función (?) En Android, que informa inmediatamente el resultado (que aún no se ha definido) para la actividad, declarada como singleTask (a pesar de que la actividad continúa ejecutándose). Si cambiamos launchMode de la actividad principal de singleTask a singleTop, todo funcionará como se espera – el resultado se reporta sólo después de que la actividad haya terminado. Si bien este comportamiento tiene cierta explicación (sólo puede existir una actividad singleTask y puede haber varios servidores para ello), esto sigue siendo una restricción no lógica para mí.

He resuelto mi problema después de eliminar intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Antes de llamar a fragment.startActivityForResult(intent, 0); .

Acabo de eliminar todos los de mi costumbre "android: launchMode" de mi actividad y todo funcionó como un encanto. No es una buena idea cambiar esto cuando usted no sabe EXACTAMENTE lo que Android está entendiendo … Android es un poco complicado de esta manera.

Esto me sucedió cuando la intención tenía el indicador Intent.FLAG_RECEIVER_FOREGROUND establecido.

(Sí, esa bandera no está relacionada con la actividad, pero la tenía en todas mis intenciones como parte de una solución de escopeta a un problema diferente ).

De nuevo como en el comentario de Mayra, setResult () no tiene nada que ver con su problema. Por alguna razón, la clase MyConfigure se termina por sí misma y cuando sucede, PreferenceActivity asume que puede haber un resultado de MyConfigure porque así es como escribió el código.

Esto también sucede cuando usted fuerza hacia atrás cualquier actividad thats comenzó con startAcitivityForResult () …

Así que, creo que es mejor centrarse en por qué su clase MyConfigure es forcely terminado.

  • Cuándo guardar los datos en la base de datos, onPause () o onStop ()?
  • FindViewById devuelve NULL cuando se utiliza Fragment
  • El método onResume () de la actividad Launcher se llama dos veces, pero onCreate () sólo una vez
  • Android Cambia el texto de TextView de otra clase
  • AutoCompleteTextView Mostrar elemento en particular Siempre
  • Android - <activity-alias> etiqueta de manifiesto
  • Android: ¿Cómo vas a otra actividad al hacer clic?
  • Android: dos actividades, una pestaña
  • ¿Cómo obtener la actividad actual en la pantalla?
  • Compruebe si la actividad se está ejecutando desde el servicio
  • Cómo ocultar la última vista de actividad en la lista de android recientes? Uso de una implementación de pantalla de casillero
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.