it-swarm.com.de

Aktivität, AppCompatActivity, FragmentActivity und ActionBarActivity: Wann ist welche zu verwenden?

Ich komme von iOS, wo es einfach ist und Sie verwenden einfach einen UIViewController. In Android scheint es jedoch viel komplizierter zu sein, mit bestimmten UIComponent für bestimmte API-Level. Ich lese BigNerdRanch für Android (das Buch ist ungefähr 2 Jahre alt) und sie schlagen vor, dass ich Activity als Host für meine FragmentActivities verwende. Ich dachte jedoch, Activity sei veraltet. 

Was genau sollte ich also für API Level 22 (mit einer Mindestunterstützung für API Level 15 oder 16) sowohl für das Hosten der Komponenten als auch für die Komponenten selbst verwenden? Gibt es für alle diese Anwendungen, oder sollte ich fast eine oder zwei verwenden?

216
Jameson

Ich dachte, Aktivität sei veraltet

Nein.

Was genau sollte ich also für API Level 22 (mit einer Mindestunterstützung für API Level 15 oder 16) sowohl für das Hosten der Komponenten als auch für die Komponenten selbst verwenden? Gibt es für alle diese Anwendungen, oder sollte ich fast eine oder zwei verwenden?

Activity ist die Basislinie. Jede Aktivität erbt direkt oder indirekt von Activity.

FragmentActivity ist für den Rückport von Fragmenten in den Bibliotheken support-v4 und support-v13 vorgesehen. Die native Implementierung von Fragmenten wurde in API Level 11 hinzugefügt, was niedriger ist als die von Ihnen vorgeschlagenen minSdkVersion-Werte. Der einzige Grund, warum Sie FragmentActivity speziell berücksichtigen müssen, ist, wenn Sie geschachtelte Fragmente verwenden möchten (ein Fragment, das ein anderes Fragment enthält), da dieses von native Fragmenten bis API-Level 17 nicht unterstützt wird.

AppCompatActivity stammt aus der appcompat-v7-Bibliothek. Grundsätzlich bietet dies einen Rückport der Aktionsleiste. Da die native Aktionsleiste in API Level 11 hinzugefügt wurde, benötigen Sie keine AppCompatActivity. Aktuelle Versionen von appcompat-v7 fügen jedoch auch einen eingeschränkten Rückgriff auf die Materialdesign-Ästhetik hinzu, was die Aktionsleiste und verschiedene Widgets angeht. Es gibt Vor- und Nachteile der Verwendung von appcompat-v7, weit über den Rahmen dieser speziellen Stack Overflow-Antwort hinaus.

ActionBarActivity ist der alte Name der Basisaktivität aus appcompat-v7. Aus verschiedenen Gründen wollten sie den Namen ändern. Wenn Sie keine Drittanbieter-Bibliothek verwenden, die auf einer ActionBarActivity besteht, sollten Sie AppCompatActivity der ActionBarActivity vorziehen.

Wenn Sie also Ihre minSdkVersion im Bereich 15-16 angeben:

  • Wenn Sie das rückseitige Material Design-Aussehen erhalten möchten, verwenden Sie AppCompatActivity.

  • Wenn nicht, aber Sie möchten verschachtelte Fragmente verwenden, verwenden Sie FragmentActivity

  • Wenn nicht, verwenden Sie Activity

Als Kommentar nur aus Kommentar hinzufügen: AppCompatActivity erweitert FragmentActivity, sodass jeder, der Funktionen von FragmentActivity verwenden muss, AppCompatActivity verwenden kann.

283
CommonsWare

Activity ist die Basisklasse aller anderen Aktivitäten. Ich glaube nicht, dass sie veraltet sein wird. Die Beziehung zwischen ihnen ist:

Activity <- FragmentActivity <- AppCompatActivity <- ActionBarActivity

'<-' bedeutet hier Vererbung. Die reference said ActionBarActivity ist veraltet, verwenden Sie stattdessen AppCompatActivity.

Grundsätzlich ist die Verwendung von AppCompatActivity immer die richtige Wahl. Die Unterschiede zwischen ihnen:

  • Activity ist die grundlegende.
  • Basierend auf Activity bietet FragmentActivity die Möglichkeit, Fragment zu verwenden.
  • Basierend auf FragmentActivity stellt AppCompatActivity Funktionen für ActionBar bereit.
64
Ted Yu

2018: Verwenden Sie AppCompatActivity

Zum Zeitpunkt dieses Schreibens (überprüfen Sie den Link, um zu bestätigen, dass er immer noch gültig ist), empfiehlt die Android-Dokumentation die Verwendung von AppCompatActivity, wenn Sie eine App-Leiste verwenden. 

Dies ist die Vernunft gegeben:

Beginnend mit Android 3.0 (API-Ebene 11) werden alle Aktivitäten, die .__ verwenden. Das Standarddesign hat eine Aktionsleiste als App-Leiste. App-Leiste Die native ActionBar wurde über .__ allmählich um Features erweitert. verschiedene Android-Versionen. Daher verhält sich die native ActionBar unterschiedlich, je nachdem welche Version des Android-Systems ein Gerät ist kann verwenden. Im Gegensatz dazu werden die neuesten Funktionen zum .__ hinzugefügt. Support Library-Version von Toolbar, und sie sind auf jedem .__ verfügbar. Gerät, das die Unterstützungsbibliothek verwenden kann.

Aus diesem Grund sollten Sie die Toolbar-Klasse der Support-Bibliothek für .__ verwenden. Implementieren Sie die App-Leisten Ihrer Aktivitäten. Verwenden der Unterstützungsbibliothek Die Symbolleiste stellt sicher, dass Ihre App ein konsistentes Verhalten aufweist über die breiteste Palette von Geräten. Beispielsweise das Toolbar-Widget bietet ein Design-Erlebnis auf Geräten, auf denen Android 2.1 ausgeführt wird (API-Ebene 7) oder höher, aber die native Aktionsleiste unterstützt nicht Materialdesign, es sei denn, auf dem Gerät wird Android 5.0 (API-Ebene 21) oder höher ausgeführt.

Die allgemeinen Anweisungen zum Hinzufügen einer Toolbar sind

  1. Fügen Sie die v7 appcompat-Unterstützungsbibliothek hinzu
  2. Machen Sie alle Ihre Aktivitäten erweitern AppCompatActivity
  3. Erklären Sie im Manifest, dass Sie NoActionBar möchten.
  4. Fügen Sie dem XML-Layout jeder Aktivität eine ToolBar hinzu.
  5. Rufen Sie die ToolBar in jeder onCreate-Aktivität auf.

Weitere Informationen finden Sie in den Dokumentationsanweisungen . Sie sind ziemlich klar und hilfreich.

61
Suragch

Für eine API-Mindeststufe von 15 möchten Sie AppCompatActivity verwenden. So würde beispielsweise Ihre MainActivity so aussehen: 

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

Um die AppCompatActivity zu verwenden, stellen Sie sicher, dass Sie die Google Support Library heruntergeladen haben (dies können Sie in Ihrem Tools -> Android -> SDK-Manager überprüfen). Fügen Sie dann einfach die Abstufungsabhängigkeit in die gradle.build-Datei Ihrer App ein:

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

Sie können diese AppCompat als Haupt-Activity verwenden, die dann zum Starten von Fragmenten oder anderen Aktivitäten verwendet werden kann (dies hängt davon ab, welche Art von App Sie erstellen). 

Das BigNerdRanch-Buch ist eine gute Ressource, aber ja, es ist veraltet. Allgemeine Informationen zur Funktionsweise von Android finden Sie hier. Erwarten Sie jedoch nicht, dass die von ihnen verwendeten Klassen auf dem neuesten Stand sind. 

48
adao7000

Activity class ist die Basisklasse. (Das Original) Es unterstützt die Fragmentverwaltung (Since API 11). Ist nicht mehr zu empfehlen, da seine Spezialisierungen viel besser sind.

ActionBarActivity war in einem Moment die Ersetzung der Activity-Klasse, da die Handhabung der ActionBar in einer App vereinfacht wurde.

AppCompatActivity ist der neue Weg, weil die ActionBar nicht mehr empfohlen wird und Sie stattdessen Toolbar verwenden sollten (das ist derzeit die ActionBar-Ersetzung). AppCompatActivity erbt von FragmentActivity. Wenn Sie mit Fragmenten arbeiten müssen, können Sie dies (über den Fragment-Manager). AppCompatActivity ist für JEDE API, nicht nur für 16+ (wer hat das gesagt?). Sie können es verwenden, indem Sie compile 'com.Android.support:appcompat-v7:24:2.0' in Ihre Gradle-Datei einfügen. Ich verwende es in API 10 und es funktioniert perfekt.

28
Joaquin Iurchuk

Hier gibt es viel Verwirrung, besonders wenn Sie veraltete Quellen lesen.

Die grundlegende ist Activity, die Fragmente anzeigen kann. Sie können diese Kombination verwenden, wenn Sie eine Android-Version> 4 verwenden.

Es gibt jedoch auch eine Unterstützungsbibliothek, die die anderen von Ihnen genannten Klassen umfasst: FragmentActivity, ActionBarActivity und AppCompat. Ursprünglich wurden sie zur Unterstützung von Fragmenten in Android-Versionen <4 verwendet, sie wurden jedoch auch für den Backport von neueren Versionen von Android (beispielsweise Materialdesign) verwendet.

Die letzte ist AppCompat, die anderen 2 sind älter. Die Strategie, die ich verwende, besteht darin, immer AppCompat zu verwenden, damit die App für Backports von zukünftigen Android-Versionen bereit ist.

11
flower_green

Da sich der Name in zukünftigen Versionen von Android voraussichtlich ändern wird (derzeit ist AppCompatActivity die neueste Version, wird sich aber wahrscheinlich irgendwann ändern), glaube ich, dass es eine gute Sache ist, eine Activity-Klasse zu haben, die AppCompatActivity erweitert ein. Wenn morgen der Name in AppCompatActivity2 geändert wird, müssen Sie ihn nur an einer Stelle ändern.

3
ExpensiveBelly

Wenn Sie über Activity, AppcompactActivity, ActionBarActivity usw. sprechen, usw.

Wir müssen über Basisklassen sprechen, die sie erweitern. Zuerst müssen wir die Hierarchie von Superklassen verstehen.

Alle Dinge werden aus dem Kontext heraus gestartet, der für alle diese Klassen eine Superklasse ist.

Context ist eine abstrakte Klasse, deren Implementierung von der .__ bereitgestellt wird. Android-System. Es ermöglicht den Zugriff auf anwendungsspezifische Ressourcen und Klassen sowie Up-Calls für Vorgänge auf Anwendungsebene wie Starten von Aktivitäten, Ausstrahlung und Empfang von Absichten usw

Context wird gefolgt von oder erweitert durch ContextWrapper

Der ContextWrapper ist eine Klasse, die die Context -Klasse einfach um die Erweiterung .__ erweitert. delegiert alle seine Aufrufe an einen anderen Kontext. Kann in .__ untergeordnet werden. Verhalten ändern, ohne den ursprünglichen Kontext zu ändern.

Jetzt erreichen wir Activity 

Activity ist eine Klasse, die ContextThemeWrapper um eine .__ erweitert. einzelne, fokussierte Sache, die der Benutzer tun kann. Fast alle Aktivitäten mit dem Benutzer interagieren, so sorgt die Activity-Klasse für die Erstellung eines Fenster für Sie

Below Klassen sind nur begrenzt erweiterbar, werden jedoch intern um ihren Abstieg erweitert und bieten Unterstützung für bestimmte APIs

Die SupportActivity ist eine Klasse, die Activity um eine Basisklasse erweitert, um Kompatibilitätsfunktionen zusammenzustellen

Die BaseFragmentActivityApi14 ist eine Klasse, die SupportActivity .__ erweitert. Das ist eine Basisklasse. Es ist eine eingeschränkte Klasse, wird jedoch um .__ erweitert. BaseFragmentActivityApi16 zur Unterstützung der Funktionalität von V14 

Das BaseFragmentActivityApi16 ist eine Klasse, die .__ erweitert. BaseFragmentActivityApi14, das eine Basisklasse für {@code .__ ist. FragmentActivity}, um v16 APIs verwenden zu können. Aber es ist auch eingeschränkte Klasse, wird jedoch von FragmentActivity erweitert, um die .__ zu unterstützen. Funktionalität von V16.

jetzt FragmentActivty

Die FragmentActivity ist eine Klasse, die .__ erweitert. BaseFragmentActivityApi16 und das unterstützungsbasierte .__ verwenden möchte. Fragment- und Loader-APIs.

Wenn Sie diese Klasse im Gegensatz zur integrierten Plattform- und Ladeprogramm-Unterstützung der neuen Plattform verwenden, müssen Sie die Methoden getSupportFragmentManager() und getSupportLoaderManager() verwenden, um auf diese Funktionen zuzugreifen.

ActionBarActivity ist Teil der Support Library. Unterstützungsbibliotheken werden verwendet, um auf älteren Plattformen neuere Funktionen bereitzustellen. Zum Beispiel: Die ActionBar wurde in API 11 eingeführt und ist Teil der Aktivität standardmäßig (abhängig vom jeweiligen Thema). Im Gegensatz Auf älteren Plattformen gibt es keine ActionBar. Also die Unterstützung Die Bibliothek fügt eine untergeordnete Klasse der Aktivität (ActionBarActivity) hinzu, die bietet die ActionBar-Funktion und die Benutzeroberfläche

2015 ist ActionBarActivity in Version 22.1.0 der Unterstützungsbibliothek veraltet. AppCompatActivity sollte stattdessen verwendet werden.

Die AppcompactActivity ist eine Klasse, die .__ erweitert. FragmentActivity, das ist die Basisklasse für Aktivitäten, die die Aktionsleistenfunktionen der Unterstützungsbibliothek verwenden.

Sie können Ihrer Aktivität eine ActionBar hinzufügen, wenn Sie diese auf API Level 7 oder höher ausführen, indem Sie diese Klasse für Ihre Aktivität erweitern und das Aktivitätsthema auf Theme.AppCompat oder ein ähnliches Design festlegen

 Here

Ich beziehe diese zwei eine , zwei

3
farhana

AppCompatActivity erweitert FragmentActivity erweitert BaseFragmentActivityApi16 erweitert BaseFragmentActivityApi14 erweitert SupportActivity erweitert Aktivität

Also Aktivität ist schneller als alle & AppCompatActivity ist das Beste von allem.

0