Lier le service à FragmentActivity ou Fragment?
Est-il préférable de lier un service à FragmentActivity
:
bindService(Intent, ServiceConnection, int);
ou à Fragment
:
getActivity().bindService(Intent, ServiceConnection, int);
Quelle est la meilleure pratique?
source d'informationauteur pawegio
Vous devez vous connecter pour publier un commentaire.
Ils sont les mêmes que vous avez écrit ici.
getActivity()
n'est pas unFragment
-- c'est une méthode qui retourne leActivity
. Vous ne pouvez pas appelerbindService()
sur unFragment
.Ni. Lier à la
Application
objet, obtenu viagetApplicationContext()
avec laServiceConnection
géré par le (ou peut-être en être) a conservéFragment
.La raison en est les changements de configuration. Une liaison est de l'état. Vous avez besoin de maintenir cet état à travers les modifications de la configuration. Alors que la conservation d'un
Fragment
peut tenir sur leServiceConnection
il y a un implicite de l'égalité dans le système entre lesServiceConnection
et laContext
qui l'a enregistré pour une liaison. Puisque les activités peuvent être détruits et recréés sur les modifications de la configuration, leActivity
n'est pas un bon choix deContext
ici.Application
qui est le système global, est un choix plus sûr, et l'un des rares endroits où le choix deApplication
sur un autreContext
est une sage décision à mon humble avis.Voici un post de blog de la mine, à partir d'une heure avant de fragments, qui se lance dans ce un peu plus. Voici un exemple de projet démonstration de la technique.