Je comprends qu'Android Activities
a des cycles de vie spécifiques et que cela onCreate
devrait être remplacé et utilisé pour l'initialisation, mais que se passe-t-il exactement dans le constructeur? Y a-t-il des cas où vous pourriez / devriez également remplacer le Activity
constructeur ou ne devriez-vous jamais le toucher?
Je suppose que le constructeur ne doit jamais être utilisé car les références à Activities
ne sont pas entièrement nettoyées (ce qui entrave le garbage collector) et c'est onDestroy
là pour cela. Est-ce correct?
Réponses:
Je ne vois aucune bonne raison de faire quoi que ce soit dans le constructeur. Vous ne construisez jamais une activité directement, vous ne pouvez donc pas l'utiliser pour transmettre des paramètres. En règle générale, faites simplement des choses dans onCreate.
la source
Une bonne raison de mettre les choses dans le constructeur comme l'avait indiqué le commentaire de Gili est l'utilisation des champs finaux.
Cependant, si vous initialisez des choses dans le constructeur, la durée de vie de l'objet sera un peu plus longue, bien que je ne pense pas de beaucoup car le
onCreate
serait appelé peu de temps après.Bien que ce soit contre mon idéal, j'évite le constructeur pour l'initialisation des membres de l'activité et je compte sur
onResume()
etonPause()
pour les ressources que mon application traite.Car
onCreate()
je l'utilise généralement pour faire le mappage de vues sur des variables locales. Bien que Android-annotations le fasse déjà pour moi, j'ai rarement uneonCreate()
méthode pour mon activité. Je l'utilise toujours en service.Cependant, si vous regardez les membres que vous initialisez peut-être
ils auraient une méthode "close" que vous devrez appeler au bon moment (onResume ou onPause)
ils feraient partie de la vue, ce qui signifie qu'il doit être initialisé puis onCreate doit être appelé
ce sont des constantes qui n'ont pas besoin d'être placées dans le constructeur de toute façon, juste une finale statique ferait l'affaire. Cela inclut les constantes Paint et Path qui peuvent être initialisées par un bloc statique
la source
Je suis maintenant sur un cas qui doit remplacer le constructeur. En fait, j'ai des activités qui ont la même structure. Donc au lieu de créer de nombreuses activités, je vais créer une activité "Master" et les autres hériteront de celle-ci. J'ai donc besoin de remplacer le constructeur de l'activité enfant pour pouvoir initialiser certaines variables qui seront utilisées dans les méthodes oncreate.
En deux mots, le constructeur vous fait simuler une "masteractivité" qui peut être réutilisée par héritage!
la source
Vous devez remplacer le constructeur lorsque votre activité aura des paramètres personnalisés ou que vous souhaitez suivre les appels de classes héritées de.
la source
startActivityForResult
je dois inclure un constructeur privé dans mon composant personnalisé, même si cette activité ne sera jamais lancée et n'a aucun élément visible, j'utilise juste le truc pour le résultat.