[android] Activity, AppCompatActivity, FragmentActivity et ActionBarActivity: quand utiliser quoi?



Answers

Activity est la classe de base de toutes les autres activités, je ne pense pas qu'elle sera dépréciée. La relation entre eux est:

Activity <- FragmentActivity <- AppCompatActivity <- ActionBarActivity

'<-' signifie héritage ici. La reference indique que ActionBarActivity est obsolète, utilisez AppCompatActivity place.

Donc, fondamentalement, en utilisant AppCompatActivity est toujours le bon choix. Les différences entre eux:

  • Activity est la base.
  • En fonction de l' Activity , FragmentActivity permet d'utiliser Fragment .
  • Basé sur FragmentActivity , AppCompatActivity fournit des fonctionnalités à ActionBar .
Question

Je viens d'iOS où c'est facile et vous utilisez simplement un UIViewController. Cependant, dans Android les choses semblent beaucoup plus compliquées, avec certains UIComponents pour des niveaux d'API spécifiques. Je lis BigNerdRanch pour Android (le livre a environ 2 ans) et ils suggèrent que j'utilise Activity pour héberger mes FragmentActivities . Cependant, je pensais que l' Activity était obsolète.

Donc, pour le niveau 22 de l'API (avec un minimum de prise en charge de l'API niveau 15 ou 16), que dois-je utiliser à la fois pour héberger les composants et pour les composants eux-mêmes? Y a-t-il des utilisations pour tout cela, ou devrais-je en utiliser un ou deux presque exclusivement?




2018: Utiliser AppCompatActivity

Au moment de la rédaction de ce document (vérifiez le lien pour confirmer qu'il est toujours vrai), la documentation Android recommande d'utiliser AppCompatActivity si vous utilisez une barre d'applications.

C'est le rationnel donné:

À partir d'Android 3.0 (niveau d'API 11), toutes les activités utilisant le thème par défaut disposent d'un ActionBar en tant que barre d'application. Toutefois, les fonctionnalités de la barre d'applications ont été progressivement ajoutées à ActionBar sur plusieurs versions Android. Par conséquent, le ActionBar natif se comporte différemment selon la version du système Android qu'un périphérique peut utiliser. En revanche, les fonctionnalités les plus récentes sont ajoutées à la version de la barre d'outils de la bibliothèque de support et elles sont disponibles sur tous les périphériques pouvant utiliser la bibliothèque de support.

Pour cette raison, vous devez utiliser la classe Barre d'outils de la bibliothèque de support pour implémenter les barres d'applications de vos activités. L'utilisation de la barre d'outils de la bibliothèque de support permet de garantir que votre application aura un comportement cohérent sur la plus large gamme de périphériques. Par exemple, le widget Barre d'outils offre une expérience de conception matérielle sur les appareils fonctionnant sous Android 2.1 (API niveau 7) ou version ultérieure, mais la barre d'actions native ne prend en charge la conception matérielle que si Android 5.0 (API niveau 21) ou ultérieur.

Les instructions générales pour l'ajout d'une barre d'outils sont

  1. Ajouter la bibliothèque de support v7 appcompat
  2. Faites en AppCompatActivity toutes vos activités s'étendent AppCompatActivity
  3. Dans le manifeste, déclarez que vous voulez NoActionBar .
  4. Ajoutez une ToolBar d' ToolBar à la disposition XML de chaque activité.
  5. Obtenez la onCreate d' onCreate dans onCreate chaque activité.

Voir les instructions de la documentation pour plus de détails. Ils sont très clairs et utiles.




Si vous parlez de Activity , AppcompactActivity , ActionBarActivity etc etc ..

Nous devons parler des classes de base qu'ils étendent. D'abord, nous devons comprendre la hiérarchie des super classes.

Toutes les choses sont lancées à partir de Context qui est super classe pour toutes ces classes.

Le contexte est une classe abstraite dont la mise en œuvre est fournie par le système Android. Il permet d'accéder à des ressources et à des classes spécifiques à une application, ainsi qu'à des appels à la demande pour des opérations au niveau de l'application telles que les activités de lancement, les intentions de diffusion et de réception, etc.

Context est suivi par ou étendu par ContextWrapper

ContextWrapper est une classe qui étend la classe Context qui délègue simplement tous ses appels à un autre contexte. Peut être sous-classé pour modifier le comportement sans modifier le contexte d'origine.

Maintenant, nous atteignons l' Activity

L' activité est une classe qui étend ContextThemeWrapper qui est une chose unique et ciblée que l'utilisateur peut faire. Presque toutes les activités interagissent avec l'utilisateur, donc la classe Activity s'occupe de créer une fenêtre pour vous

Les classes ci-dessous sont limitées à étendre, mais ils sont étendus par leur descendeur en interne et fournissent un soutien pour Api spécifique

Le SupportActivity est une classe qui étend Activity qui est une classe de base pour composer ensemble des fonctionnalités de compatibilité

Le BaseFragmentActivityApi14 est une classe qui étend SupportActivity qui est une classe de base Il est une classe restreinte mais il est étendu par BaseFragmentActivityApi16 pour prendre en charge la fonctionnalité de V14

BaseFragmentActivityApi16 est une classe qui étend BaseFragmentActivityApi14 qui est une classe de base pour {@code FragmentActivity } afin de pouvoir utiliser les API v16 . Mais c'est aussi une classe restreinte mais elle est étendue par FragmentActivity pour supporter la fonctionnalité de V16.

maintenant FragmentActivty

FragmentActivity est une classe qui étend BaseFragmentActivityApi16 et qui souhaite utiliser les API Fragment et Loader basées sur le support.

Lorsque vous utilisez cette classe par opposition à la prise en charge intégrée des fragments et des chargeurs de la nouvelle plate-forme, vous devez utiliser respectivement les getSupportFragmentManager() et getSupportLoaderManager() pour accéder à ces fonctions.

ActionBarActivity fait partie de la bibliothèque de support. Les bibliothèques de support sont utilisées pour fournir de nouvelles fonctionnalités sur les anciennes plates-formes. Par exemple, le ActionBar a été introduit dans l'API 11 et fait partie de l'activité par défaut (en fonction du thème). En revanche, il n'y a pas ActionBar sur les anciennes plates-formes. Ainsi, la bibliothèque de support ajoute une classe enfant d'activité ( ActionBarActivity ) qui fournit la fonctionnalité et l' interface utilisateur ActionBar

En 2015, ActionBarActivity est obsolète dans la révision 22.1.0 de la bibliothèque de support. AppCompatActivity doit être utilisé à la place.

AppcompactActivity est une classe qui étend FragmentActivity qui est la classe de base pour les activités qui utilisent les fonctionnalités de la barre d'actions de la bibliothèque de support.

Vous pouvez ajouter un ActionBar à votre activité lors de l'exécution au niveau 7 ou supérieur de l'API en étendant cette classe pour votre activité et en définissant le thème d'activité sur Theme.AppCompat ou un thème similaire

Je me réfère à ces deux one , two




Il y a beaucoup de confusion ici, surtout si vous lisez des sources obsolètes.

La base est l' Activity , qui peut montrer des fragments. Vous pouvez utiliser cette combinaison si vous êtes sur la version Android> 4.

Cependant, il existe également une bibliothèque de support qui englobe les autres classes que vous avez mentionnées: FragmentActivity , ActionBarActivity et AppCompat . A l'origine, ils étaient utilisés pour supporter des fragments sur les versions Android <4, mais en réalité, ils sont également utilisés pour rétroporter les fonctionnalités des nouvelles versions d'Android (conception de matériel par exemple).

Le dernier en date est AppCompat , les 2 autres sont plus anciens. La stratégie que j'utilise est de toujours utiliser AppCompat , de sorte que l'application sera prête en cas de backports de futures versions d'Android.






Related