アクティビティは Android のアプリの基本的なコンポーネントの一つであり、通常は、ログイン画面、メッセージの一覧、設定ページなど、ユーザーインターフェイスを持つ一つの画面を表します。各アクティビティは Activity、または多くの場合 AppCompatActivity や ComponentActivity を継承するクラスであり、アプリの AndroidManifest.xml に登録されなければなりません。ユーザーがホーム画面からアプリを開くと、システムはアプリのエントリーポイントとして指定されたアクティビティを開始し、そこからアプリはインテントを使ってほかのアクティビティを開けます。
アクティビティには、Android のシステムによって制御されるライフサイクルがあります。onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy() などのメソッドを通じて、アプリは画面が作成されたとき、表示されたとき、フォーカスを失ったとき、閉じられたときに通知を受けるため、適切なタイミングでリソースを解放しデータを保存できます。多くの現代のアプリは一つまたは少数のアクティビティだけを使い、個々の画面をフラグメントや Jetpack Compose で構築しますが、アクティビティは引き続きアプリのユーザーインターフェイスをシステムにつなぐ要素です。
アプリ開発におけるアクティビティは、ユーザーにとってのインタラクティブなウィンドウとして機能する、Android のアプリケーションの一つの画面を指します。各アクティビティはユーザーの操作の処理とデータの表示を担い、開発者は動的で魅力的なユーザー体験を作成できます。アクティビティは互いにデータを受け渡すことで連携でき、アプリのシームレスなナビゲーションと機能を確保します。
More about アクティビティ
アクティビティは、ユーザーインターフェイスを持つ一つの画面を表す、Android のアプリケーション開発における中心的なコンポーネントです。各アクティビティは、ユーザーの操作を処理しデータを表示する自己完結した単位であり、開発者は動的で魅力的なユーザー体験を作成できます。アクティビティは Android のアプリの基本的な構成要素であり、ユーザーがアプリの機能と相互作用する入り口として機能します。
技術的には、アクティビティは Android SDK の Activity クラスのサブクラスであり、アクティビティがどのように作成、開始、停止、破棄されるかを制御するライフサイクルのメソッドを処理することで機能します。アクティビティが開始されると、一連のライフサイクルの段階を通過し、開発者はリソースを効率的に管理し、ユーザーの操作に反応できます。これには onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy() などのメソッドが含まれ、それぞれがスムーズで応答性の高いユーザー体験の確保に役割を果たします。
アクティビティはさまざまな方法で表示でき、それぞれが異なる種類の相互作用を支えます。
全画面:ここでは、アクティビティはユーザーの操作を処理しデータを表示する独立した画面として機能します。これは最も一般的な形であり、ユーザーはアプリ内の異なる画面の間を移動します。
ダイアログとして:ダイアログのテーマを使うと、アクティビティは現在の画面の上に浮かぶダイアログボックスとして表示されます。これは、現在の文脈を離れずに重要なメッセージを表示したりユーザーの入力を求めたりするために使われることがありますが、ダイアログはダイアログフラグメントや Compose で実装されることのほうが多いです。
没入モード:アクティビティは画面を完全に制御し、没入感のある体験を提供するために、ステータスバーやナビゲーションバーなどのシステムバーを隠します。これは、コンテンツへの集中が極めて重要なゲームやメディアの再生に最適です。
アクティビティの最大の強みの一つは、複雑なユーザーの操作とナビゲーションのパターンを処理できる能力です。Android のアクティビティのモデルは、ユーザーが前の画面に戻れるバックスタックなど、多くのナビゲーションのパターンを支え、直感的で予測可能なユーザー体験を生み出します。さらに、アクティビティはインテントを使ってデータを共有し互いに通信でき、アプリの異なる部分の間のシームレスな統合を可能にします。
アクティビティは、リソース効率がよいようにも設計されています。Android のライフサイクルのメソッドにより、開発者は、アクティビティが表示されていないときに不要なリソースを解放し、フォアグラウンドに戻ったときに再読み込みすることで、リソースの消費を最適化できます。これにより、限られたリソースのデバイスでも、アプリが応答性と効率を保てるようになります。
実際に、アクティビティは Android のアプリが設計され開発される方法を形作ってきました。ユーザーの操作とナビゲーションのパターンを処理するための構造化されたアプローチを提供し、開発者は豊かで魅力的なユーザー体験を作成できます。アクティビティは多くの人気のアプリの中核にあり、コンテンツの整理、ユーザーの入力の処理、異なる機能の間の移動に使われています。
まとめると、アクティビティは、柔軟性、効率、使いやすさを組み合わせ、開発者が強力で直感的なアプリを作成できるようにする、Android の開発の不可欠な部分です。複雑なライフサイクルとナビゲーションのパターンを処理できる能力により、ユーザー体験と効率的なリソース管理が極めて重要な現代のアプリ開発において中心的なツールとなっています。
Frequently asked questions about アクティビティ
Android におけるアクティビティとは何ですか?
アクティビティは Android のアプリの基本的な構成要素の一つです。通常は、ログイン画面、メッセージの一覧、設定ページなど、ユーザーインターフェイスを持つ一つの画面を表します。ユーザーはアクティビティを通じてアプリと相互作用します。
各アクティビティは Activity、またはより多くの場合 AppCompatActivity や ComponentActivity を継承するクラスであり、AndroidManifest.xml ファイルで宣言されなければなりません。一つのアクティビティがエントリーポイントとして指定されるため、システムはユーザーがアプリのアイコンをタップしたときに何を開くかを知っています。現代のアプリは多くの場合アクティビティが少なく、異なる画面を表示するためにフラグメントや Jetpack Compose を使います。
アクティビティのライフサイクルはどのように機能するのですか?
アクティビティは、作成された瞬間から閉じられるまで、一連の状態を通過します。Android は状態が変わると特定のメソッドを呼び出します。onCreate はアクティビティが作成されたときに呼び出され、ここでユーザーインターフェイスが設定されます。onStart と onResume は、表示され使える状態になったときに呼び出されます。
ユーザーが別のアプリや画面に切り替えると、onPause と onStop が呼び出され、アクティビティが完全に閉じられると onDestroy が呼び出されます。適切なメソッドにコードを置くことで、アプリはたとえば表示されていないときに動画を停止したり、閉じられる前にデータを保存したりできます。誤った処理はエラーを引き起こし、リソースを無駄にすることがあります。
アプリはどのようにアクティビティの間を切り替えるのですか?
アプリはインテントを使って、あるアクティビティから別のアクティビティに切り替えます。インテントはどのアクティビティを開くべきかを記述し、新しい画面が表示するべき商品の ID などのデータを含められます。インテントは startActivity メソッドで送信されます。
新しいアクティビティは、バックスタックと呼ばれるスタックの一番上に置かれます。ユーザーが戻るを押すと、一番上のアクティビティが閉じられ、前のアクティビティが再び表示されます。新しい画面が選択した画像などの結果を返す必要がある場合は、Activity Result API が使われます。ただし、多くの現代のアプリは一つのアクティビティと Navigation コンポーネントを使い、その中で画面を切り替えます。
画面が回転すると、アクティビティには何が起こるのですか?
ユーザーが電話を回転させると構成が変わり、既定では Android は現在のアクティビティを破棄し、再び作成します。これにより、新しい向きに適した別のレイアウトを読み込めますが、アクティビティだけに保持されたデータが失われる可能性があることも意味します。
これを避けるために、通常は ViewModel が使われ、これは構成の変更を生き延び、読み込まれた一覧などのデータを保持します。フィールドのテキストやスクロール位置などの少量の状態は、onSaveInstanceState や Jetpack Compose の rememberSaveable で保存できます。言語、テーマ、画面サイズが変わるときも同じことが当てはまります。
アクティビティとフラグメントの違いは何ですか?
アクティビティは、システムに知られ AndroidManifest.xml で宣言される自己完結したコンポーネントです。アプリのユーザーインターフェイスのコンテナーとして機能し、たとえば通知や別のアプリから直接開始できます。
フラグメントは、常にアクティビティの中に存在する、ユーザーインターフェイスのより小さく再利用可能な部分です。タブレットで一覧と詳細表示を並べるなど、同じアクティビティ内に複数のフラグメントを表示できます。フラグメントには独自のライフサイクルがあり、それはホストするアクティビティに結び付いています。多くのアプリは少数のアクティビティと多くのフラグメントや Compose の画面を使います。
アクティビティの起動モードとは何ですか?
起動モードは、新しいアクティビティが開始されたときに、既存のアクティビティとの関係でどのように配置されるかを決めます。既定では、同じアクティビティがすでに開いていても、毎回新しいインスタンスが作成されます。
singleTop では、アクティビティがすでにスタックの一番上にある場合、新しいものを作成する代わりに再利用されます。singleTask では、インスタンスは一つだけ存在し、再び開かれるとその上にあるアクティビティが削除されます。singleInstance はアクティビティを独自のタスクに置き、Android 12 以降、singleInstancePerTask ではタスクごとに一つのインスタンスが許されます。起動モードは AndroidManifest.xml で、またはインテントのフラグで指定され、たとえば通知からアプリが開かれたときの重複を避けるために使われます。
アクティビティ for dummies
アプリのアクティビティは、携帯電話の一つの画面のようなものです。本の一ページと考えるとわかりやすいでしょう。アプリを開くと、ニュースを読む、メッセージを送る、写真を見るなど、特定のことができる画面が表示されます。これらの画面の一つ一つが「アクティビティ」です。ニュースを読むことからメッセージを送ることに切り替えることは、あるアクティビティから別のアクティビティに切り替えることを意味します。これは、アプリが異なる機能と情報を整理し、移動しやすく使いやすくする方法です。