Es necesario hacer clase personalizada resultreceiver se extendía desde ResultReceiver
continuación, implementa la interfaz resultreceiver en su actividad
Pass objeto resultreceiver personalizada para intentService y en intentservice solo fe Seleccione el objeto receptor y llame a la función receiver.send() para enviar cualquier cosa a la actividad de llamada en el objeto Bundle.
aquí es la clase customResultReceiver:
public class MyResultReceiver extends ResultReceiver {
private Receiver mReceiver;
public MyResultReceiver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
public interface Receiver {
public void onReceiveResult(int resultCode, Bundle resultData);
}
public void setReceiver(Receiver receiver) {
mReceiver = receiver;
}
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
if (mReceiver != null) {
mReceiver.onReceiveResult(resultCode, resultData);
}
}
}
implementa la interfaz Myresultreceiver.receiver en que la actividad, crear una clase variable de
Public MyResultReceiver mReceiver;
inicializar esta variable en onCreate:
mReceiver = new MyResultReceiver(new Handler());
mReceiver.setReceiver(this);
Pass this mReceiver a la intentService a través de:
intent.putExtra("receiverTag", mReceiver);
y traiga en IntentService como:
ResultReceiver rec = intent.getParcelableExtra("receiverTag");
y enviar nada a la actividad utilizando rec como:
Bundle b=new Bundle();
rec.send(0, b);
este será recibido en onReceiveResult de la actividad. Puede ver el código completo en: IntentService: Providing data back to Activity
Editar: Usted debe llamar setReceiver (este) en onResume y setReceiver (nulo) en onPause() para evitar fugas.
Esto es muy útil para mí. ¡Gracias! Buena explicación! – herbertD
esta debería ser la respuesta correcta, necesita usar un controlador para ejecutar la devolución de llamada en el subproceso ui (principal). no puede modificar la interfaz de usuario si adjunta directamente un ResultReceiver a su intención. –
Entonces, ¿el Revisor de resultados siempre va de la mano con un servicio de intenciones? ¿Y hay una forma menos complicada de lograr lo que hace el ResultReceiver? Quiero decir, esta arquitectura parece demasiado intrincada y tiene demasiadas dependencias circulares. –