web-dev-qa-db-fra.com

Android - Constructeur d'activités vs onCreate

Je comprends que Android Activities ont des cycles de vie spécifiques et que onCreate doit être remplacé et utilisé pour l'initialisation, mais que se passe-t-il exactement dans le constructeur? Y a-t-il des cas quand vous pourriez/devriez également remplacer le constructeur Activity, 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 (gênant ainsi le ramasse-miettes) et que onDestroy est là pour cela. Est-ce correct?

81
idolize

Je ne vois aucune bonne raison de faire quoi que ce soit dans le constructeur. Vous ne construisez jamais directement une activité, vous ne pouvez donc pas l'utiliser pour passer des paramètres. Généralement, faites simplement les choses dans onCreate.

32
Cheryl Simon

Une bonne raison de mettre des choses dans le constructeur, comme l'avait dit 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 beaucoup car le onCreate sera appelé peu de temps après.

Bien que cela soit contraire à mon idéal, j'évite le constructeur pour l'initialisation des membres de l'activité et je me fie à onResume() et onPause() pour les ressources que mon application utilise.

Pour onCreate() je l'utilise habituellement pour faire un mappage de vue sur des variables locales. Bien que les annotations Android le fassent déjà pour moi, j'ai donc rarement une méthode onCreate() pour mon activité. Je l'utilise toujours en service.

Cependant, si vous regardez les membres, vous initialisez peut-être

  • ils auraient une méthode "close" que vous devez invoquer 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 mises de toute façon dans le constructeur, juste une finale statique ferait l'affaire. Cela inclut les constantes Paint et Path qui peuvent être initialisées par un bloc statique

7
Archimedes Trajano

Je suis maintenant sur un cas qui doit remplacer le constructeur. En fait, j'ai certaines 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!

6
biboMandroid

Vous devez remplacer le constructeur lorsque votre activité aura des paramètres personnalisés ou si vous souhaitez suivre les appels des classes héritées de.

0
Pentium10