アクティビティの概要

Activity クラスは Android の重要なコンポーネント そのうえで、アクティビティの開始と組み立ての方法は、 一部として識別されます。プログラミング パラダイムとは異なり、 main() メソッドで起動するアプリ、Android Activity インスタンスでコードを開始するには、 特定のステージに対応する特定のコールバック あります。

このドキュメントでは、アクティビティのコンセプトを紹介した後、 簡単に説明します。 アプリ設計のベスト プラクティスについて詳しくは、 <ph type="x-smartling-placeholder"></ph>をご覧ください アプリ アーキテクチャ ガイドをご覧ください。

アクティビティのコンセプト

モバイルアプリとパソコンの違い ユーザーとアプリとのやり取りが、常に同じ場所から開始するとは限りません。 多くの場合、ユーザー ジャーニーは非決定的に始まっています。 たとえば、ホーム画面からメールアプリを開くと、 メールのリストを作成します。一方、ソーシャル メディア アプリを使用している場合は、 メールアプリが起動したら、メールアプリの画面に直接 作成しました。

Activity クラスは、このパラダイムを実現するように設計されています。 一方のアプリから別のアプリが呼び出されると、呼び出し元のアプリはもう一方のアプリのアクティビティを呼び出す アトミックな全体としてのアプリではありません。このようにして、アクティビティは アプリがユーザーとやり取りするためのエントリ ポイント。実装すると Activity クラスのサブクラスとして定義します。

アクティビティは、アプリが描画するウィンドウを提供する できます。通常、このウィンドウは画面全体に表示されますが、 他のウィンドウの上にフロート表示したりできます通常、1 つのアクティビティは に実装します。たとえば、アプリのアクティビティが Preferences 画面を実装する一方で、別のアクティビティで [写真を選択] 画面

ほとんどのアプリは複数の画面を備えているため、複数の画面で構成されます。 できます。通常、アプリ内の 1 つのアクティビティがメインの アクティビティです。これは、ユーザーがアプリを起動したときに最初に表示される画面です。 各アクティビティは、次の目的で別のアクティビティを開始できます。 さまざまなアクションを実行できます。たとえば、単純なメールの主要なアクティビティは、 アプリでメールの受信トレイを表示する画面が提供されることがあります。そこから アクティビティは、次のようなタスクの画面を提供する他のアクティビティを起動することがあります。 メールを書く、個々のメールを開くといった手間が省けます。

アクティビティは連携して機能し、一貫した 各アクティビティは他のアクティビティに緩やかにバインドされている。他にも 通常は、アプリ内のアクティビティ間の依存関係を最小限にします。実際、 アクティビティは、多くの場合、他のアプリに属するアクティビティを起動します。たとえば ブラウザアプリがソーシャル メディア アプリの共有アクティビティを起動する場合があります。

アプリでアクティビティを使用するには、アクティビティに関する情報を 含まれていないため、アクティビティのライフサイクルを適切に管理する必要があります。 このドキュメントの残りの部分では、これらのテーマについて説明します。

マニフェストの設定

アプリでアクティビティを使用できるようにするには、次のようにアクティビティを宣言する必要があります。 および特定の属性をマニフェストで指定できます。

アクティビティを宣言する

アクティビティを宣言するには、マニフェスト ファイルを開いて <activity> 要素を <アプリケーション> 要素です。次に例を示します。

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

この要素で必須属性は android:name アクティビティのクラス名を指定します。属性も追加できます。 ラベル、アイコン、UI テーマなどのアクティビティの特性を定義します。 これらの属性とその他の属性について詳しくは、このモジュールの <activity> 要素のリファレンス ドキュメントをご覧ください。

注: アプリを公開すると、 アクティビティは変更しないでください。 できます。追加すると、アプリのショートカットなどの一部の機能が使用できなくなる可能性があります。 公開後に避けるべき変更について詳しくは、以下をご覧ください。 <ph type="x-smartling-placeholder"></ph> 変化できないもの」へようこそ。

インテント フィルタを宣言する

インテント フィルタ 非常に強力な機能です。 基盤となるインフラストラクチャだけでなく、 明示的なリクエストだけでなく、暗黙的なリクエストも含まれます。たとえば 明示的なリクエストでは、システムに「Send Email アクティビティを開始する」を 。一方、暗黙的なリクエストは [Start a Send Email] 画面は ということになります。使用するアプリをシステム UI がユーザーに尋ねる場合 タスクを実行する際のインテント フィルタとして機能します。

この機能を利用するには、Terraform で <intent-filter> 属性() <activity> 要素に設定します。この要素の定義には、 <action> 要素、および オプションとして、 <カテゴリ> 要素または <data> 要素です。これらの要素 アクティビティが応答できるインテントのタイプを指定します。対象 次のコード スニペットは、特定の Google Cloud サービス内で テキストデータを送信し、他のアクティビティからそのリクエストを受け取ります。

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

この たとえば、<action> 要素は、このアクティビティがデータを送信することを指定します。 <category> の宣言 要素です(DEFAULT はアクティビティを有効にします) リリース リクエストを受信できます。<data> 要素は、トレーニング データに含まれる 送信できるかどうかを確認します。次のコード スニペットは、 上記のアクティビティを実行します。

Kotlin

val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)

Java

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);
アプリを自己完結型にし、他のアプリの有効化を許可しない場合 そのアクティビティにのみ影響し、 必要ありません。行わないアクティビティ インテント フィルタを持たず、 明示的に開始することもできます。認証と認可の方法について詳しくは、 アクティビティは、インテントに応答できます。詳しくは、インテント とインテント フィルタをご覧ください。

権限を宣言する

マニフェストの <ph type="x-smartling-placeholder"></ph> 制御する <activity> タグ どのアプリが特定のアクティビティを開始できるかを指定できます。親アクティビティは 子アクティビティ(両方のアクティビティに同じ権限がある場合を除く) 使用します。Pod の <ph type="x-smartling-placeholder"></ph> <uses-permission> すべての子アクティビティに対応するには、 <ph type="x-smartling-placeholder"></ph> <uses-permission> 要素です。

たとえば、アプリで SocialApp という名前の架空のアプリを使用する場合 ソーシャル メディアで投稿を共有するには、SocialApp 自体で権限を定義する必要があります。 には以下が必要です。

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

その後、SocialApp の呼び出しを許可するには、アプリが SocialApp のマニフェスト:

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

一般的な権限とセキュリティの詳細については、 セキュリティと権限

アクティビティのライフサイクルの管理

アクティビティは、その存続期間にわたっていくつかの状態に遷移します。 一連のコールバックを使用することで、状態間の遷移を処理します。以下のセクション コールバックを追加します。

onCreate()

このコールバックは実装する必要があります。このコールバックは、 できます。実装では、Terraform の主要なコンポーネントを 必要があります。たとえば、アプリでビューを作成し、データを リストがあります。最も重要なのは、この段階で setContentView() アクティビティのユーザー インターフェースのレイアウトを定義します。

onCreate() が終了すると、 次のコールバックは常に onStart() です。

onStart()

onCreate() が終了すると、アクティビティは 開始状態になり、アクティビティがユーザーに表示されます。 このコールバックには、アクティビティに対するアクティビティの最終的な準備が インタラクティブになります。

onResume()

システムは、アクティビティがやり取りを開始する直前に、このコールバックを呼び出します。 ユーザーと共有できますこの時点でアクティビティは一番上にある すべてのユーザー入力をキャプチャします。アプリのコア機能のほとんどは、 onResume() メソッドに実装されている。

onPause() コールバックは常に onResume() に従う。

onPause()

アクティビティが失われた場合、システムは onPause() を呼び出します。 一時停止状態になります。この状態は、たとえば、ユーザーが 戻るボタンまたは履歴ボタンをタップしたとき。システムが アクティビティにonPause()、 厳密に言えば、これは活動が部分的に見えることを意味しますが、ほとんどの場合、 ユーザーがアクティビティを離れると、アクティビティはすぐに 停止または再開された状態。

一時停止状態のアクティビティでも、ユーザーが UI が更新されることを想定しています。たとえば、ナビゲーションを表示するアクティビティなどです。 再生中のメディア プレーヤー。このようなアクティビティのフォーカスが失われても、ユーザーは UI の更新が続くことを期待します。

使用しないでください。 onPause() - アプリケーションまたはユーザーを保存する ネットワーク呼び出しやデータベース トランザクションの実行など、さまざまなタスクを実行できます。 データの保存について詳しくは、をご覧ください。 アクティビティの状態の保存と復元

onPause() の実行が完了すると、 次のコールバックは、onStop() または onResume()。ただし、 アクティビティが一時停止状態になった後に行われます。

onStop()

onStop() が呼び出されると、 アクティビティがユーザーに表示されなくなります。 これは、アクティビティが破棄されたり、新しいアクティビティが 開始するか、既存のアクティビティが 再開された状態になり、停止したアクティビティを対象とします。 いずれの場合も、停止したアクティビティは 表示されます。

システムが次に呼び出すコールバックは、 onRestart()( ユーザーとやり取りするために再び訪れたときや、 onDestroy()

onRestart()

このコールバックは、停止状態のアクティビティが 確認します。onRestart() アクティビティが停止した時点の状態を復元します。

このコールバックには常に onStart()

onDestroy()

システムは、アクティビティが破棄される前にこのコールバックを呼び出します。

このコールバックは、アクティビティが受け取る最後のコールバックです。 onDestroy() は 通常は、アクティビティのすべてのリソースが アクティビティまたはそれを含むプロセスが破棄されたときに解放されます。

このセクションでは、このトピックの概要についてのみ説明します。詳細については、 アクティビティのライフサイクルとそのコールバックの扱い方について アクティビティ ライフサイクルをご覧ください。