web-dev-qa-db-fra.com

Activity, AppCompatActivity, FragmentActivity et ActionBarActivity: Quand utiliser lequel?

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 composants UIC pour certains niveaux d’API. Je lis BigNerdRanch pour Android (le livre date d'environ 2 ans) et ils suggèrent que j'utilise Activity pour héberger mes FragmentActivities. Cependant, je pensais que Activity était obsolète. 

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

216
Jameson

Je pensais que l'activité était obsolète

Non.

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

Activity est la ligne de base. Chaque activité hérite de Activity, directement ou indirectement.

FragmentActivity doit être utilisé avec le backport de fragments trouvés dans les bibliothèques support-v4 et support-v13. L'implémentation native de fragments a été ajoutée à l'API niveau 11, ce qui est inférieur aux valeurs minSdkVersion proposées. La seule raison pour laquelle vous auriez besoin de prendre en compte FragmentActivity spécifiquement est si vous souhaitez utiliser des fragments imbriqués (un fragment contenant un autre fragment), car cela n'était pas pris en charge dans les fragments natifs jusqu'au niveau 17 de l'API.

AppCompatActivity provient de la bibliothèque appcompat-v7. Principalement, cela offre un backport de la barre d’action. Étant donné que la barre d’action native a été ajoutée à l’API Niveau 11, vous n’avez pas besoin de AppCompatActivity pour cela. Cependant, les versions actuelles de appcompat-v7 ajoutent également un backport limité de l'esthétique de Material Design, en termes de barre d'action et de divers widgets. Il existe des avantages et des inconvénients à utiliser appcompat-v7, bien au-delà de la portée de cette réponse spécifique Stack Overflow.

ActionBarActivity est l'ancien nom de l'activité de base de appcompat-v7. Pour diverses raisons, ils ont voulu changer le nom. Sauf si une bibliothèque tierce que vous utilisez insiste sur ActionBarActivity, vous devriez préférer AppCompatActivity à ActionBarActivity.

Donc, étant donné votre minSdkVersion dans la fourchette 15-16:

  • Si vous voulez l'apparence de conception de matériau rétroportée, utilisez AppCompatActivity

  • Sinon, mais si vous voulez des fragments imbriqués, utilisez FragmentActivity

  • Sinon, utilisez Activity

Il suffit d'ajouter du commentaire en tant que note: AppCompatActivity étend FragmentActivity, de sorte que toute personne devant utiliser les fonctionnalités de FragmentActivity peut utiliser AppCompatActivity.

283
CommonsWare

Activity est la classe de base de toutes les autres activités, je ne pense pas que ce sera obsolète. La relation entre eux est:

Activity <- FragmentActivity <- AppCompatActivity <- ActionBarActivity

'<-' signifie héritage ici. La référence said ActionBarActivity est obsolète, utilisez plutôt AppCompatActivity.

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

  • Activity est la base.
  • Basé sur Activity, FragmentActivity permet d'utiliser Fragment.
  • Sur la base de FragmentActivity, AppCompatActivity fournit des fonctionnalités à ActionBar.
64
Ted Yu

2018: Utilisez AppCompatActivity

Au moment d'écrire ces lignes (vérifiez le lien pour vous assurer 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 (API niveau 11), toutes les activités utilisant le thème par défaut a un ActionBar comme barre d’application. Cependant, app bar des fonctionnalités ont été progressivement ajoutées à la barre d’action native sur diverses versions Android. Par conséquent, le ActionBar natif se comporte différemment selon la version du système Android, un appareil peut utiliser. En revanche, les fonctionnalités les plus récentes sont ajoutées au fichier version de la barre d’outils de la bibliothèque de support, et ils sont disponibles sur n’importe quel fichier appareil pouvant utiliser la bibliothèque de support.

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

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 sorte que toutes vos activités soient prolongées AppCompatActivity
  3. Dans le manifeste, déclarez que vous voulez NoActionBar.
  4. Ajoutez une ToolBar à la présentation XML de chaque activité.
  5. Obtenez la ToolBar dans la onCreate de chaque activité.

Voir les instructions documentation pour plus de détails. Ils sont assez clairs et utiles.

61
Suragch

Pour un niveau minimum de 15 API, vous voudriez utiliser AppCompatActivity. Ainsi, par exemple, votre MainActivity ressemblerait à ceci: 

public class MainActivity extends AppCompatActivity {
    ....
    ....
}

Pour utiliser la AppCompatActivity, assurez-vous d'avoir téléchargé la bibliothèque de support de Google (vous pouvez le vérifier dans Outils -> Android -> Gestionnaire de SDK). Ensuite, incluez simplement la dépendance de gradle dans le fichier gradle.build de votre application:

compile 'com.Android.support:appcompat-v7:22:2.0'

Vous pouvez utiliser cette AppCompat comme votre Activity principale, qui peut ensuite être utilisée pour lancer des fragments ou d'autres activités (cela dépend du type d'application que vous construisez). 

Le livre BigNerdRanch est une bonne ressource, mais oui, il est obsolète. Lisez-le pour des informations générales sur le fonctionnement d'Android, mais ne vous attendez pas à ce que les classes spécifiques qu'ils utilisent soient à jour. 

48
adao7000

Activity class est la classe de base. (L'original) Il prend en charge la gestion des fragments (depuis l'API 11). N'est plus recommandé son utilisation pure car ses spécialisations sont bien meilleures.

ActionBarActivity était dans un instant le remplacement de la classe d'activité, car il facilitait la gestion du ActionBar dans une application.

AppCompatActivity est le nouveau chemin à parcourir car la barre d’action n’est plus encouragée et vous devez utiliser Toolbar à la place (c'est actuellement le remplacement du ActionBar). AppCompatActivity hérite de FragmentActivity donc si vous devez gérer des fragments, vous pouvez (via le gestionnaire de fragments). AppCompatActivity est destiné à N'IMPORTE QUELLE API, pas seulement à 16 ans et plus (qui a dit cela?). Vous pouvez l'utiliser en ajoutant compile 'com.Android.support:appcompat-v7:24:2.0' dans votre fichier Gradle. Je l'utilise dans API 10 et cela fonctionne parfaitement.

28
Joaquin Iurchuk

Il y a beaucoup de confusion ici, surtout si vous lisez des sources périmées.

La base est Activity, qui peut montrer des fragments. Vous pouvez utiliser cette combinaison si vous utilisez la version Android> 4.

Cependant, il existe également une bibliothèque de support englobant les autres classes que vous avez mentionnées: FragmentActivity, ActionBarActivity et AppCompat. À l'origine, ils étaient utilisés pour prendre en charge des fragments sur les versions d'Android <4, mais en réalité, ils étaient également utilisés pour reporter les fonctionnalités de versions plus récentes d'Android (conception matérielle 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 soit prête en cas de backport des futures versions d'Android.

11
flower_green

Comme le nom changera probablement dans les futures versions d’Android (le dernier en date étant AppCompatActivity mais il le sera probablement à un moment donné), je pense qu’il est bon d’avoir une classe Activity qui étend AppCompatActivity, puis toutes vos activités s’étendent de ce un. Si demain, ils changent le nom en AppCompatActivity2 par exemple, vous devrez le changer juste à un endroit.

3
ExpensiveBelly

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

Nous devons parler des classes de base qu’elles étendent. Nous devons d’abord comprendre la hiérarchie des super classes.

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

Context est une classe abstraite dont l'implémentation est fournie par le Système Android. Il permet d'accéder aux ressources spécifiques à l'application et aux fichiers classes, ainsi que des appels ascendants pour des opérations au niveau de l'application telles que activités de lancement, diffusion et réception, etc.

Context est suivi ou prolongé par ContextWrapper

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

Maintenant nous atteignons Activity 

Activity est une classe qui étend ContextThemeWrapper qui est un chose unique et ciblée que l’utilisateur peut faire. Presque toutes les activités interagir avec l'utilisateur, la classe d'activité se charge donc de créer un fenêtre pour toi

Below Les classes sont limitées à l'extension, mais elles sont étendues par leur descendant en interne et prennent en charge des Api spécifiques

SupportActivity est une classe qui étend Activity, qui est une classe de base permettant de composer des fonctionnalités de compatibilité.

BaseFragmentActivityApi14 est une classe qui étend SupportActivity c'est une classe de base C'est une classe restreinte mais elle est étendue par BaseFragmentActivityApi16 pour prendre en charge la fonctionnalité de V14 

Le BaseFragmentActivityApi16 est une classe qui étend BaseFragmentActivityApi14 qui est une classe de base pour {@code FragmentActivity} pour pouvoir utiliser v16 API. Mais c’est aussi classe restreinte mais elle est étendue par FragmentActivity pour prendre en charge le fichier fonctionnalité de V16.

maintenant FragmentActivty

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

Lorsque vous utilisez cette classe par opposition au support intégré du chargeur et du fragment de la nouvelle plate-forme, vous devez utiliser respectivement les méthodes getSupportFragmentManager() et getSupportLoaderManager() pour accéder à ces fonctionnalités.

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. Pour Par exemple, le ActionBar a été introduit dans l'API 11 et fait partie du Activité par défaut (selon le thème choisi). En revanche il n'y a pas ActionBar sur les anciennes plates-formes. Donc le support La bibliothèque ajoute une classe enfant d’Activity (ActionBarActivity) qui fournit la fonctionnalité ActionBar et l'interface utilisateur

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, c'est-à-dire 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é lorsque vous utilisez une API de niveau 7 ou supérieur en étendant cette classe pour votre activité et en définissant le thème de l'activité sur Theme.AppCompat ou un thème similaire.

 Here

Je renvoie ces deux un , deux

3
farhana

AppCompatActivity étend FragmentActivity s'étend BaseFragmentActivityApi16 étend BaseFragmentActivityApi14 étend SupportActivity étend Activité

Donc, Activity est plus rapide que tout & AppCompatActivity est le meilleur de tous.

0
Ahamadullah Saikat