10
votes

Héritage entre activités dans Android

J'ai du mal à appliquer le concept d'héritage aux activités Android - par exemple. ActivityA étend une activité et ActivityB étend ActivityA , puis si je lance avec ActivityB, la méthode Oncreate () pour Les activités (A alors b) sont appelées.

Ma question est que, dans la typique Java, Oncreate d'Actvitya devrait être excessive - mais oncreate est plutôt un comportement comme un constructeur, même si c'est une fonction. Comment l'héritage fonctionne-t-il dans Android, en particulier WRT d'autres fonctions telles que l'onpaause (), OnResume, etc.?

Edit: J'ai également remarqué que l'activité a peut-être de nombreuses méthodes abstraites appelées dans son ONCREATE () dont les définitions sont fournies dans ActivityB. Comment cela fonctionne-t-il?


2 commentaires

esp. WRT Autres fonctions d'état? Veuillez définir cette phrase. Je ne comprends pas.


+1 pour une belle question. !!


3 Réponses :


7
votes

Si vous avez votre activité de base, puis étendez-la comme SO Activité -> Activité A Cela signifie que lorsque votre oncreate de Activité A est appelé et vous appelez super.oncreate (); the oncreate () méthode de l'activité d'origine est également appelée.

Si vous étendez ensuite activité A dans activité B Les appels fonctionnent comme si ...

activité b.oncreate () - super.oncreate (); -> activité A.Oncreate () - Super.Oncreate () -> Activity.Oncreate () .

Ce n'est pas un constructeur, c'est une méthode qui s'appelle pour créer les activités . Si vous les étendez ensuite à partir d'autres activités Sa superclasse va être appelée via sa méthode Super . Cela ne signifie pas que les activités que vous avez héritées d'être créées aussi. Activité B sera votre activité créée .

edit: Cette page sur le développeur Android Le site Web est très utile car il explique visuellement le cycle de vie d'activité Android.


5 commentaires

Je tiens également à souligner en plus que la raison de oncreate au lieu du constructeur est que sur le changement d'orientation, l'objet ne doit pas être reconstruit.


ahh .. Comment ai-je manqué super.oncreate () merci beaucoup et pourriez-vous également expliquer comment les méthodes abstraites fonctionnent (j'ai modifié la question)


@AndroidLearnmachine Quelles méthodes parlez-vous?


Ce que je voulais dire, il y a des méthodes abstraites dans Activitya qui sont appelées dans l'Oncreate () d'Activity. Ces méthodes ne sont définies que dans ActivityB, comment se passe-t-elle? Sont-ils invoqués avec la définition dans ActivityB?


Si vous deviez créer des méthodes dans ActivityB et les appelez dans la méthode onCreate d'Activityb, alors si vous créez une activité d'activité (sans allonger l'activitéb), ces méthodes ne seraient pas appelées.



1
votes

Oui comme une fonction de Java typique OnCreate aurait dû être héritée, mais il ne faut pas: pourquoi? - Parce que ce n'est pas juste une méthode, c'est une étape du cycle de vie.

afaik, l'activité n'est pas simplement une classe Java, mais c'est un type spécial de classe Java qui a son propre cycle de vie et que des stades de cycle de vie sont censés être appelés chaque fois que vous utilisez cette classe / activité même si vous avez déclarés ou non ces méthodes surcreee (), onpae () etc. est appelée à l'assurance.

Donc, chaque fois que l'activité de base sera créée et détruite. C'est c'est la nature.

Si vous avez un problème avec lequel vous pouvez essayer d'utiliser des classes abstraits, des interfaces et toute autre classe publique à avoir hérité de code commun dans votre toutes les activités.


0 commentaires

0
votes

Comment l'héritage fonctionne-t-il dans Android?

Il n'y a rien de spécial sur Android. Il fonctionne exactement comme il le devrait.

exemple?

permet de créer une qui écoute à un Broadcasteceiver = "https://developer.androïd.com/reference/andrroid/net/wifi/wifimanager.html#scan_results_available_action" rel = "nOfollow NOREFERRER"> scan_results_Available ).
Les fonctions si courantes sont,

  1. Enregistrer A BroadCastraCeiver dans Oncreate ()
  2. Unregister a BroadcastraCeiver dans OnDestroy ()

    BASECLASS: xxx

    classe enfant: xxx


0 commentaires