Synchronous startActivityForResult – Esperando que la actividad se complete
Tengo una aplicación donde estoy lanzando una nueva Actividad, y necesito tener el resultado de la actividad antes de proceder.
Me doy cuenta de que startActivityForResult es asincrónico / no bloqueador, y que puedo obtener el resultado de la actividad en la devolución de llamada onActivityResult.
- Android: Cancelar tarea asíncrona
- Espere los datos async retrive de Firebase en android
- Iniciar nuevo subproceso en Async Task
- ¿Cómo dar una barra de progreso para la descarga?
- AFNetworking para Android
Así que supongo que lo que estoy buscando es la mejor manera de esperar a que la actividad vuelva … Algo como esto tal vez? ¿O hay un mejor camino?
Actividad Lanzador Función:
public String ActivityLauncher() { //Set up Intent startActivityForResult(intent, 1); while (mIsActivityDone == false) { Thread.Sleep(250); } //Continue with processing String data = "<Data from Activity"> return data; }
Llamar de vuelta:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { //Pull out the data mIsActivityDone = true; }
Los datos deben ser devueltos a una función de llamada de nivel superior – es por eso que necesito esperar el resultado en la función ActivityLauncher.
¡Gracias!
- Necesita un ejemplo que muestre cómo realizar solicitudes HTTP asíncronas
- Voleadas asincrónicas en android SyncAdapter
- Retrofit 2.0 Convertor devuelve NULL
- Construir gráficas de dependencias asincrónicamente en Dagger 2
- Actividades síncronas y asíncronas
- Cómo gestionar varias tareas asíncronas de forma eficiente en Android
- Android: la mejor práctica para realizar operaciones asíncronas en getView ()
- Crear ContentProvider asincrónico para Actionbar SearchView
Esto bloqueará el hilo de la interfaz de usuario para que no se ejecute otra actividad. Yo utilizaría algún tipo de clase de devolución de llamada proporcionada por la función de nivel superior, en este tipo de situación y llamar a su función de devolución de llamada en onActivityResult
Si puedes iniciar estas actividades desde un nuevo hilo, entonces Android tiene una solución para ti. Puede utilizar Instrumentación. ¿Por qué necesita un nuevo hilo? Debido a que startActivitySync comprobará si está siendo invocado en un subproceso principal. Si su hilo principal entonces lanzará una excepción.
La instrumentación le permite monitorear una actividad. Puede supervisar esta actividad de forma bloqueada o no bloqueante.
IntentFilter intF = new IntentFilter("ACTIVITY.THAT.YOU.WANT.TO.LAUNCH"); Instrumentation instrumentation = new Instrumentation(); Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(intF, null, true); Intent i = new Intent("ACTIVITY.THAT.YOU.WANT.TO.LAUNCH"); instrumentation.startActivitySync(i);