web-dev-qa-db-ja.com

アクティビティ、AppCompatActivity、FragmentActivity、およびActionBarActivity:いつ使用するのか

私はiOSから来ているのは簡単で、あなたは単にUIViewControllerを使うのです。しかし、Androidでは、特定のAPIレベルに対応する特定のUIComponentがあるため、状況ははるかに複雑に見えます。私はAndroid用BigNerdRanchを読んでいます(この本は2歳くらいです)。彼らは私のActivityをホストするためにFragmentActivitiesを使うことを勧めています。しかし、私はActivityは廃止予定だと思いました。

では、APIレベル22(APIレベル15または16の最低限のサポート)では、コンポーネントのホスティングとコンポーネント自体の両方に正確に何を使用すればよいでしょうか。これらすべてに用途はありますか、それとも1つか2つをほぼ排他的に使用する必要がありますか?

223
Jameson

活動は廃止予定だと思いました

いいえ.

では、APIレベル22(APIレベル15または16の最低限のサポート)では、コンポーネントのホスティングとコンポーネント自体の両方に正確に何を使用すればよいでしょうか。これらすべてに用途はありますか、それとも1つか2つをほぼ排他的に使用する必要がありますか?

Activityがベースラインです。すべてのアクティビティは直接的または間接的にActivityから継承します。

FragmentActivityは、support-v4およびsupport-v13ライブラリにあるフラグメントのバックポートで使用するためのものです。フラグメントのネイティブ実装は、API Level 11で追加されました。これは、提案されているminSdkVersion値よりも低い値です。 FragmentActivityを特に考慮する必要がある唯一の理由は、ネストされたフラグメント(別のフラグメントを保持するフラグメント)を使用したい場合です。これはネイティブレベルのフラグメントではAPI Level 17までサポートされていなかったからです。

AppCompatActivityappcompat-v7ライブラリからのものです。主に、これはアクションバーのバックポートを提供します。ネイティブアクションバーはAPIレベル11で追加されたので、そのためにAppCompatActivityは必要ありません。ただし、現在のバージョンのappcompat-v7では、アクションバーとさまざまなウィジェットの観点から、Material Design審美的なバックポートも制限されています。この特定のStack Overflow回答の範囲をはるかに超えて、appcompat-v7を使用することの長所と短所があります。

ActionBarActivityappcompat-v7からのベースアクティビティの古い名前です。さまざまな理由から、彼らは名前を変更したかったのです。あなたが使っているサードパーティのライブラリがActionBarActivityを主張しない限り、AppCompatActivityよりActionBarActivityを選ぶべきです。

15〜16の範囲のminSdkVersionを考えてみましょう。

  • バックポートされたマテリアルデザインを見たい場合はAppCompatActivityを使用してください。

  • そうでない場合は、ネストしたフラグメントが必要ですが、FragmentActivityを使用してください。

  • そうでなければ、Activityを使用してください。

コメントとしてコメントから追加するだけです。AppCompatActivityはFragmentActivityを拡張するため、FragmentActivityの機能を使用する必要がある人は誰でもAppCompatActivityを使用できます。

293
CommonsWare

Activityは他のすべてのアクティビティの基底クラスです。廃止予定とは思われません。それらの間の関係は次のとおりです。

Activity < - FragmentActivity < - AppCompatActivity < - ActionBarActivity

'< - 'はここで継承を意味します。 reference によるとActionBarActivityは推奨されていません。代わりにAppCompatActivityを使用してください。

したがって、基本的には、AppCompatActivityを使用することは常に正しい選択です。それらの違いは:

  • Activityは基本的なものです。
  • Activityに基づいて、FragmentActivityFragmentを使用する機能を提供します。
  • FragmentActivityに基づいて、AppCompatActivityActionBarに機能を提供します。
65
Ted Yu

2018年:AppCompatActivityを使う

これを書いている時点では(リンクをチェックして、まだ正しいことを確認してください)、 Android Documentation App Barを使用している場合はAppCompatActivityを使用することをお勧めします。

これは与えられた合理的なものです。

Android 3.0(APIレベル11)以降、デフォルトのテーマを使用するすべてのアクティビティには、アクションバーとしてアプリケーションバーがあります。ただし、Androidのさまざまなリリースにわたって、アプリバーの機能がネイティブのActionBarに徐々に追加されています。結果として、ネイティブのActionBarは、デバイスが使用しているAndroidシステムのバージョンに応じて動作が異なります。対照的に、最新の機能はサポートライブラリのバージョンのツールバーに追加されており、サポートライブラリを使用できるすべてのデバイスで利用できます。

そのため、アクティビティのアプリバーを実装するには、サポートライブラリのToolbarクラスを使用する必要があります。サポートライブラリのツールバーを使用すると、アプリは幅広いデバイスで一貫した動作をすることができます。たとえば、ツールバーウィジェットは、Android 2.1(APIレベル7)以降を実行しているデバイスでのマテリアルデザインエクスペリエンスを提供しますが、デバイスがAndroid 5.0(APIレベル21)以降を実行していない限り、ネイティブアクションバーはマテリアルデザインをサポートしません。

ツールバーを追加するための一般的な方法は次のとおりです。

  1. V7 appcompatサポートライブラリを追加する
  2. すべての活動をAppCompatActivityに拡張させる
  3. マニフェストでNoActionBarが欲しいと宣言します。
  4. 各アクティビティのxmlレイアウトにToolBarを追加します。
  5. 各アクティビティのToolBaronCreateを取得します。

詳細については ドキュメントの指示 を参照してください。それらは非常に明確かつ有用です。

62
Suragch

最低15のAPIレベルでは、AppCompatActivityを使用します。したがって、たとえば、MainActivityは次のようになります。

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

AppCompatActivityを使用するには、Google Support Libraryがダウンロードされていることを確認してください(これは[ツール] - > [Android] - > [SDKマネージャ]で確認できます)。次に、アプリケーションのgradle.buildファイルにgradle依存関係を含めます。

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

このAppCompatをあなたのメインのActivityとして使うことができ、それはそれからFragmentsや他のアクティビティを起動するために使うことができます(これはあなたが構築しているアプリの種類によって異なります)。

BigNerdRanchの本は良い情報源ですが、ええ、それは時代遅れです。 Androidがどのように機能するかについての一般的な情報を読んでください。ただし、使用する特定のクラスが最新のものになるとは思わないでください。

48
adao7000

Activityクラスは基本クラスです。 (オリジナル)フラグメント管理をサポートします(API 11以降)。その専門ははるかに優れているので、もはやその純粋な使用はお勧めできません。

ActionBarActivityは、Activityクラスへの置き換えの瞬間に/アプリケーション内でActionBarを扱いやすくしたためです。

AppCompatActivity - 新しいやり方でActionBarは推奨されなくなり、代わりにToolbarを使うべきです(現在はActionBarの置き換えです)。 AppCompatActivityはFragmentActivityを継承しているので、Fragmentを処理する必要がある場合は(Fragment Managerを使用して)処理できます。 AppCompatActivityは任意のAPI用で、16歳以上ではありません(誰が言ったのですか?)。 Gradleファイルにcompile 'com.Android.support:appcompat-v7:24:2.0'を追加することによってそれを使うことができます。私はそれをAPI 10で使っていますが、それは完璧に働きます。

28
Joaquin Iurchuk

特に古くなった情報源を読んでいる場合は特に混乱が生じます。

基本的なものはActivityで、これはフラグメントを表示できます。 Androidバージョン> 4の場合は、この組み合わせを使用できます。

しかし、あなたが言及した他のクラスを含むサポートライブラリもあります:FragmentActivityActionBarActivityそしてAppCompat。もともとそれらはAndroidのバージョン<4でフラグメントをサポートするために使用されていましたが、実際にはそれらはAndroidの新しいバージョン(例えば材料設計)から機能をバックポートするためにも使用されています。

最新のものはAppCompatです、他の2つはより古いです。私が使用する戦略は常にAppCompatを使用することです。その結果、アプリは将来のバージョンのAndroidからのバックポートの場合に備えて準備ができているでしょう。

11
flower_green

名前は将来のAndroidのバージョンで変わる可能性があるので(現在最新のものはAppCompatActivityですが、いつか変わるかもしれません)、Activityを拡張したクラスAppCompatActivityがそれから拡張されるのは良いことだと思います1。明日の場合、彼らは名前をAppCompatActivity2に変更します。例えば、あなたは一箇所でそれを変更しなければならないでしょう。

3
ExpensiveBelly

ActivityAppcompactActivityActionBarActivityなどについて話していますか。

拡張している基本クラスについて話す必要があります。最初に、スーパークラスの階層を理解する必要があります。

すべてのことは、これらすべてのクラスのスーパークラスであるContextから始まります。

Contextは、その実装がAndroidシステムによって提供される抽象クラスです。アプリケーション固有のリソースやクラスへのアクセス、アクティビティの起動、インテントのブロードキャストや受信などのアプリケーションレベルの操作の呼び出しを可能にします。

Contextの後にContextWrapperが続くか拡張されている

ContextWrapperContextクラスを拡張したクラスで、単にその呼び出しのすべてを別のContextに委任します。元のContextを変更せずに動作を変更するためにサブクラス化することができます。

今度はActivityに到達します

ActivityContextThemeWrapperを拡張するクラスです。これはユーザーができることに焦点を絞った単一のものです。ほとんどすべてのアクティビティはユーザとやり取りするので、Activityクラスがあなたのためにウィンドウを作成します。

Belowクラスは拡張が制限されていますが、それらは子孫によって内部的に拡張されており、特定のApiをサポートしています

SupportActivityは、互換機能を構成するためのBaseクラスであるActivityを拡張したクラスです。

BaseFragmentActivityApi14は、BaseクラスであるSupportActivityを継承したクラスです。制限付きクラスですが、V14の機能をサポートするためにBaseFragmentActivityApi16によって拡張されています。

BaseFragmentActivityApi16は、v16 APIを使用できるようにするための{@code FragmentActivity}の基本クラスであるBaseFragmentActivityApi14を拡張するクラスです。しかしそれはまた制限されたクラスですが、V16の機能をサポートするためにFragmentActivityによって拡張されています。

今FragmentActivty

FragmentActivityBaseFragmentActivityApi16を拡張するクラスで、サポートベースのFragmentおよびLoader APIを使用したいと考えています。

新しいプラットフォームに組み込まれているフラグメントおよびローダーのサポートとは対照的にこのクラスを使用する場合は、getSupportFragmentManager()およびgetSupportLoaderManager()メソッドをそれぞれ使用してこれらの機能にアクセスする必要があります。

ActionBarActivityはサポートライブラリの一部です。サポートライブラリは、古いプラットフォームで新しい機能を提供するために使用されます。たとえば、ActionBarはAPI 11で導入され、デフォルトではActivityの一部です(実際のテーマによって異なります)。対照的に、古いプラットフォームにはActionBarはありません。そのため、サポートライブラリは、ActionBarの機能とUIを提供するActivityの子クラス(ActionBarActivity)を追加します。

2015年ActionBarActivityは、サポートライブラリのリビジョン22.1.0で廃止されました。代わりにAppCompatActivityを使用する必要があります。

AppcompactActivityは、サポートライブラリのアクションバー機能を使用するアクティビティの基本クラスであるFragmentActivityを拡張したクラスです。

アクティビティのためにこのクラスを拡張し、アクティビティのテーマをTheme.AppCompatまたは同様のテーマに設定することで、APIレベル7以上で実行するときにActionBarをアクティビティに追加できます。

Here

私はこれら2つを参照してください onetwo

3
Farhana

AppCompatActivity extends FragmentActivity extends BaseFragmentActivityApi16 extends BaseFragmentActivityApi14 extends SupportActivity extends アクティビティ

だから アクティビティ はすべてより速いです& AppCompatActivity は最も優れています。

0