Pregunta Enlace el servicio a FragmentActivity o Fragment?


¿Es mejor vincular el servicio a FragmentActivity:

bindService(Intent, ServiceConnection, int);

o para Fragment:

getActivity().bindService(Intent, ServiceConnection, int);

¿Qué es una mejor práctica?


10
2018-03-05 22:57


origen


Respuestas:


¿Es mejor vincular el servicio a FragmentActivity ... o a Fragment?

Son los mismos que los tienes escritos aquí. getActivity() no es un Fragment - es un método que devuelve el Activity. No puedes llamar bindService() en un Fragment.

¿Qué es una mejor práctica?

Ninguno. Enlace al Application objeto, obtenido a través de getApplicationContext(), con el ServiceConnection administrado por (o quizás en realidad siendo) un retenido Fragment.

El motivo son los cambios de configuración. Un enlace es estado. Debe mantener ese estado en todos los cambios de configuración. Mientras que un retenido Fragment puede aferrarse a la ServiceConnection, hay un vínculo implícito en el sistema entre ServiceConnection y el Context que lo registró para un enlace. Dado que las actividades se pueden destruir y recrear en los cambios de configuración, Activity no es una buena elección de Context aquí. Application, que es system-global, es una opción más segura, y uno de los pocos lugares donde elegir Application Sobre otra Context es un movimiento inteligente en mi humilde opinión.

Aquí hay una publicación de blog mío, de un tiempo anterior a fragmentos, eso entra en esto un poco más. Aquí hay un proyecto de muestra demostrando la técnica.


38
2018-03-05 23:07



Preguntas populares