onActivityResult () llamado prematuramente

Comienzo la Activity (descendiente de PreferenceActivity ) de mi actividad de trabajador de la siguiente manera:

 @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); } 

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

Ahora se llama onActivityResult con requestCode of 1458 prematuramente, justo después de MyConfigure actividad MyConfigure . Probado en 1.6 y 2.1 emuladores, así como 2.1 dispositivo. ¿Hay alguna llamada a setResult() enterrada en algún lugar de PreferenceActivity ? ¿O cómo se puede explicar esta llamada prematura?

Esto se soluciona cambiando el modo de singleTop a singleTop :

   

Hay un error / función (?) En Android, que informa inmediatamente el resultado (que aún no se ha establecido) para Activity , declarado como singleTask (a pesar de que la actividad continúa ejecutándose). Si cambiamos launchMode de la actividad principal de singleTask a singleTop , todo funciona como se espera: el resultado se informa solo después de que la actividad finaliza. Si bien este comportamiento tiene cierta explicación (solo puede existir una actividad singleTask y puede haber varios servidores para ella), esta sigue siendo una restricción no lógica para mí.

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

Acabo de eliminar todo mi “android: launchMode” personalizado de mi actividad y todo funcionó como un amuleto. No es una buena idea cambiar esto cuando no se sabe EXACTAMENTE qué es lo que Android está entendiendo … Android es un poco complicado de esta manera.

Esto me sucedió cuando el bash tenía el indicador Intent.FLAG_RECEIVER_FOREGROUND establecido.

(Sí, esa bandera no está relacionada con la actividad, pero la tuve en todos mis bashs como parte de una solución de escopeta para 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 termina y cuando sucede PreferenceActivity solo asume que podría haber un resultado de MyConfigure porque así es como escribiste el código.

esto también ocurre cuando fuerza cualquier actividad que haya comenzado con startActivityForResult()

Por lo tanto, creo que es mejor centrarse en por qué su clase MyConfigure se termina a la fuerza.