¿Qué sucede cuando mi actividad se destruye cuando estoy usando IntentService con ResultReceiver
He buscado a través de la red para encontrar esta respuesta. Pero no se encontró ningún resultado. Lo siento que soy un novato en la programación de Java y Android.
Quisiera ampliar mi pregunta más. Dejar decir mi actividad comenzó un IntentService y se está ejecutando independientemente en el fondo. El servicio está "suscrito" a la devolución de llamada de ResultReceiver para actualizar la IU de actividad. Y durante el servicio está ejecutando el proceso de larga ejecución, la actividad se destruye. Entonces, ¿qué pasará si el servicio envía una respuesta o actualización de progreso a la actividad a través de ResultReceiver?
- PARTIAL_WAKE_LOCK vs SCREEN_DIM_WAKE_LOCK en el subproceso de descarga
- Simular la animación dentro de la vista personalizada en Android
- ¿Cómo detener Handler Runnable?
- ¿Qué es más eficiente Broadcast Receiver o Handler?
- Nuevo Tema (tarea) .start () VS ThreadPoolExecutor.submit (tarea) en Android
Porque como sé, el ResultReceiver necesita tener una referencia de la Actividad.
En mi proyecto tengo que desarrollar una aplicación de mensajería de video clip. Que cuando el usuario capturó el video, pasará los datos al servicio y el servicio realizará subir, así como guardar alguna información en db .. mientras mantiene la publicación de la actualización de progreso a la actividad de la interfaz de usuario a través de ResultReceiver.
El usuario es capaz de salir o matar a la actividad como les gusta. Pero cuando regresan a la aplicación / Actividad, si la carga / descarga sigue en curso, debe mostrar el progreso actual.
Al principio pienso en Asynctask, pero también está teniendo el problema similar como mencioné. Necesita una referencia de la actividad de la persona que llama.
¿Hay algún lugar donde pueda cumplir el requisito que he mencionado? Lo siento por el largo post. Espero que alguien me pueda iluminar un poco y es incluso mejor tener algún fragmento de código. Muchas gracias 🙂
Edit: En resumen, ¿existe una manera de enlazar dinámicamente una actividad recién creada a un IntentService en ejecución para que el servicio pueda enviar la actualización de progreso a la Actividad correcta?
- Descargar imagen de Android desde el servidor y guardar en sdcard sin utilizar BitmapFactory
- Programación de procesos Android
- ¿Cómo puedo asegurar que el controlador de otro hilo no sea nulo antes de llamarlo?
- Mejora del rendimiento de OpenCV Android: seguimiento rápido de objetos
- ¿Cómo ejecutar una aplicación Qt en segundo plano en Android?
- Android ejecutar hilo en el servicio cada X segundos
- Buenas prácticas para multi-threading
- Diferencia entre AsyncTask y Thread / Runnable
Utilice un BroadcastReceiver en su actividad y registre / onResume()
su registro en onResume()
y onPause()
respectivamente. Puede utilizar un IntentFilter
para escuchar una Intent
de su IntentService
.
En su IntentService
, cree un valor de acción para el IntentFilter
y envíe una transmisión con esa acción cuando desee actualizar:
public static final String ACTION = "com.example.yourapp.action.ACTION_TAG"; private void handleResult() { if (BuildConfig.DEBUG) { Log.v(TAG, "handleResult"); } // Broadcast result Intent intent = new Intent(ACTION); intent.putExtra("your_extra", someValue); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); }
En su Activity
:
private BroadcastReceiver mYourReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (BuildConfig.DEBUG) { Log.v(TAG, "onReceive"); } Bundle bundle = intent.getExtras(); if (bundle != null) { // Update with content from bundle } } }; @Override public void onResume() { super.onResume(); if (BuildConfig.DEBUG) { Log.v(TAG, "onResume"); } // Register broadcast receiver LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mYourReceiver, new IntentFilter(YourIntentService.ACTION)); } @Override public void onPause() { super.onPause(); if (BuildConfig.DEBUG) { Log.v(TAG, "onPause"); } // Unregister broadcast receiver LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mYourReceiver); }
- Uso de los padres para obtener recursos
- ¿Cómo ejecutar varios videos con diferentes VideoViews en una actividad en android 2.2?