<activity>

構文:
<activity android:allowEmbedded=["true" | "false"]
          android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:autoRemoveFromRecents=["true" | "false"]
          android:banner="drawable resource"
          android:clearTaskOnLaunch=["true" | "false"]
          android:colorMode=[ "hdr" | "wideColorGamut"]
          android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "screenLayout", "fontScale",
                                 "uiMode", "orientation", "density",
                                 "screenSize", "smallestScreenSize"]
          android:directBootAware=["true" | "false"]
          android:documentLaunchMode=["intoExisting" | "always" |
                                  "none" | "never"]
          android:enabled=["true" | "false"]
          android:excludeFromRecents=["true" | "false"]
          android:exported=["true" | "false"]
          android:finishOnTaskLaunch=["true" | "false"]
          android:hardwareAccelerated=["true" | "false"]
          android:icon="drawable resource"
          android:immersive=["true" | "false"]
          android:label="string resource"
          android:launchMode=["standard" | "singleTop" |
                              "singleTask" | "singleInstance"]
          android:lockTaskMode=["normal" | "never" |
                              "if_whitelisted" | "always"]
          android:maxRecents="integer"
          android:maxAspectRatio="float"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:noHistory=["true" | "false"]  
          android:parentActivityName="string" 
          android:persistableMode=["persistRootOnly" | 
                                   "persistAcrossReboots" | "persistNever"]
          android:permission="string"
          android:process="string"
          android:relinquishTaskIdentity=["true" | "false"]
          android:resizeableActivity=["true" | "false"]
          android:screenOrientation=["unspecified" | "behind" |
                                     "landscape" | "portrait" |
                                     "reverseLandscape" | "reversePortrait" |
                                     "sensorLandscape" | "sensorPortrait" |
                                     "userLandscape" | "userPortrait" |
                                     "sensor" | "fullSensor" | "nosensor" |
                                     "user" | "fullUser" | "locked"]
          android:showForAllUsers=["true" | "false"]
          android:stateNotNeeded=["true" | "false"]
          android:supportsPictureInPicture=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource or theme"
          android:uiOptions=["none" | "splitActionBarWhenNarrow"]
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
    . . .
</activity>
含まれているファイル:
<application>
含めることのできる要素:
<intent-filter>
<meta-data>
<layout>
説明:
アプリの視覚的なユーザー インターフェースの一部を実装するアクティビティ(Activity サブクラス)を宣言します。すべてのアクティビティは、マニフェスト ファイルの <activity> 要素で指定する必要があります。宣言されていないアクティビティはシステムによって認識されず、実行されません。
属性:
android:allowEmbedded
アクティビティを別のアクティビティの子として埋め込み、起動できることを示します。これは特に、別のアクティビティが所有するディスプレイなどのコンテナに子が存在する場合です。たとえば、Wear のカスタム通知に使用されるアクティビティは、Wear が別のプロセスに存在するコンテキスト ストリーム内でこのアクティビティを表示できるようにするため、この宣言が必要です。

この属性のデフォルト値は false です。

android:allowTaskReparenting
タスクが次に前面に移動したとき、アクティビティを開始したタスクからアフィニティを持つタスクにアクティビティを移動できるかどうか。移動できる場合は "true"、アクティビティを開始したタスクに留まる必要がある場合は "false" を指定します。

この属性が設定されていない場合、対応する <application> 要素の allowTaskReparenting 属性によって設定された値がアクティビティに適用されます。デフォルト値は "false" です。

通常、アクティビティを開始すると、アクティビティを開始したタスクにアクティビティが関連付けられ、アクティビティの生存期間中はそこに留まります。この属性を使用すると、現在のタスクが表示されなくなったときに、アフィニティを持つタスクをアクティビティの親として再割り当てすることができます。一般に、アプリに関連付けられたメインタスクにアプリのアクティビティを移動する場合に使用します。

たとえば、メール メッセージにウェブページへのリンクが含まれている場合、リンクをクリックすると、そのウェブページを表示できるアクティビティが起動します。そのアクティビティはブラウザアプリで定義されていますが、メールタスクの一部として起動されます。ブラウザタスクをアクティビティの親として再割り当てすると、ブラウザが次に前面に移動したときにアクティビティが表示され、メールタスクが再び前面に移動したときにはそのアクティビティが表示されなくなります。

アクティビティのアフィニティは、taskAffinity 属性で定義されます。タスクのアフィニティは、タスクのルート アクティビティのアフィニティを読み取って決定されます。したがって、定義上は、ルート アクティビティは常に、同じアフィニティを持つタスク内に存在します。起動モードに "singleTask" または "singleInstance" が設定されたアクティビティはタスクのルートにのみ存在できるため、親の再割り当ては "standard" モードと "singleTop" モードに限定されます。(launchMode 属性もご覧ください。)

android:alwaysRetainTaskState
アクティビティが割り当てられているタスクの状態を常にシステムで維持するかどうか。維持する場合は "true"、特定の状況でシステムがタスクを初期状態にリセットできるようにするには "false" を指定します。デフォルト値は "false" です。この属性が重要なのは、タスクのルート アクティビティのみです。その他すべてのアクティビティについては無視されます。

通常は、ユーザーがホーム画面からタスクを選択し直したような状況で、システムはタスクをクリアします(ルート アクティビティ上のスタックからすべてのアクティビティを削除します)。一般に、ユーザーが特定の時間(たとえば 30 分間)、タスクにアクセスしなかった場合にこの処理が行われます。

ただし、この属性が "true" の場合、ユーザーがどのような方法でタスクにアクセスしても、常に前回のタスクの状態に戻ります。これは、たとえば、ウェブブラウザのようなアプリで便利です。これにより、ユーザーは多くの状態(開いている複数のタブなど)をそのまま維持することができます。

android:autoRemoveFromRecents
この属性を指定したアクティビティによって開始されたタスクについて、タスク内の最後のアクティビティが完了するまでオーバービュー画面に表示し続けるかどうか。true の場合、タスクが自動的にオーバービュー画面から削除されます。これは、呼び出し元による FLAG_ACTIVITY_RETAIN_IN_RECENTS の使用よりも優先されます。"true" または "false" のブール値を指定する必要があります。
android:banner
関連するアイテムに拡張されたグラフィック バナーを提供するドローアブル リソース<activity> タグで使用すると、特定のアクティビティにデフォルトのバナーを配置します。<application> タグで使用すると、アプリのすべてのアクティビティにバナーを配置します。

Android TV のホーム画面では、システムがこのバナーを使用してアプリを表示します。バナーはホーム画面のみに表示されるため、CATEGORY_LEANBACK_LAUNCHER インテントを処理するアクティビティを持つアプリでのみ指定する必要があります。

この属性は、画像を含むドローアブル リソースへの参照(たとえば "@drawable/banner")として設定する必要があります。デフォルトのバナーはありません。

詳細については、TV アプリのビルドを開始するページのホーム スクリーンにバナーを配置するをご覧ください。

android:clearTaskOnLaunch
タスクがホーム画面から再起動されたときに、ルート アクティビティを除くすべてのアクティビティをタスクから削除するかどうか。常にタスクのルート アクティビティ以外をクリアする場合は "true"、そうでない場合は "false" を指定します。デフォルト値は "false" です。この属性は、新しいタスクを開始するアクティビティ(ルート アクティビティ)にのみ影響します。タスクのその他すべてのアクティビティでは、この属性は無視されます。

値が "true" の場合は、タスクの直前の操作や、タスクから離れるときに [戻る] ボタンまたは [ホーム] ボタンを押したかどうかにかかわらず、ユーザーが再びタスクを開始するたびにルート アクティビティから開始します。値が "false" の場合、状況によってはタスクのアクティビティがクリアされることがありますが、常にクリアされるわけではありません(alwaysRetainTaskState 属性をご覧ください)。

たとえば、ホーム画面からアクティビティ P を起動し、そこからアクティビティ Q に移ったとします。ユーザーが [ホーム] を押して、再びアクティビティ P に戻りました。通常、ユーザーにはアクティビティ Q が表示されます。前回、P のタスクで Q を実行していたからです。ただし、P でこのフラグが "true" に設定されていると、P をベースにするすべてのアクティビティ(この場合は Q)は、ユーザーが [ホーム] を押したときに削除され、タスクはバックグラウンドに移動します。そのため、ユーザーがタスクに戻ると、P のみが表示されます。

この属性と allowTaskReparenting の両方が "true" の場合、親の再割り当てが可能なアクティビティはすべて、アフィニティを共有するタスクに移動され、残りのアクティビティは上記のとおり削除されます。

android:colorMode

対応端末でアクティビティを広色域モードで表示するようにリクエストします。広色域モードでは、SRGB よりも広い色域でウィンドウをレンダリングして、より鮮やかな色を表示できます。端末で広色域レンダリングがサポートされていない場合、この属性を指定しても効果はありません。ワイドカラー モードでのレンダリングの詳細については、ワイドカラー コンテンツによるグラフィックの拡張をご覧ください。

android:configChanges
アクティビティで処理する設定変更のリストを指定します。実行時に設定の変更が発生すると、デフォルトではアクティビティはシャットダウンおよび再起動されますが、この属性で設定を宣言しておくと、アクティビティの再起動を防止できます。代わりに、アクティビティは実行中のままになり、アクティビティの onConfigurationChanged() メソッドが呼び出されます。

注:この属性の使用はなるべく避けて、あくまでも最後の手段として使用する必要があります。設定変更に伴う再起動を適切に処理する方法については、実行時の変更の処理をご覧ください。

次の文字列はすべて、この属性の有効な値です。複数の値は、「|」で区切ります。たとえば、"locale|navigation|orientation" のように指定します。

説明
"density" 表示密度が変更されました。ユーザーが別の表示スケールを指定したか、別のディスプレイがアクティブになっている可能性があります。

API レベル 24 で追加。

"fontScale" フォントのスケーリング係数が変更されました。ユーザーが新しいグローバル フォントサイズを選択しました。
"keyboard" キーボードの種類が変更されました。たとえば、ユーザーが外付けキーボードを接続しました。
"keyboardHidden" キーボードのユーザー補助機能が変更されました。たとえば、ユーザーがハードウェア キーボードを表示するよう指定しました。
"layoutDirection" レイアウト方向が変更されました。たとえば、左から右(LTR)が右から左(RTL)に変更されました。

API レベル 17 で追加。

"locale" 言語 / 地域が変更されました。ユーザーが新しい言語を選択しました。この言語でテキストが表示されます。
"mcc" IMSI モバイル カントリー コード(MCC)が変更されました。SIM が検出され、MCC を更新しました。
"mnc" IMSI モバイル ネットワーク コード(MNC)が変更されました。SIM が検出され、MNC を更新しました。
"navigation" ナビゲーションの種類(トラックボール / D-pad)が変更されました(これは通常、発生しません)。
"orientation" 画面の向きが変更されました。ユーザーが端末の向きを変えました。

注:アプリが Android 3.2(API レベル 13)以上を対象としている場合は、"screenSize" 設定も宣言する必要があります。端末の縦向きと横向きを切り替えると、この値も変更されるためです。

"screenLayout" 画面のレイアウトが変更されました。別のディスプレイがアクティブになっている可能性があります。
"screenSize" 現在使用可能な画面サイズが変更されました。

これは、現在のアスペクト比に応じた、現在使用可能なサイズの変更を表します。したがって、ユーザーが横向きと縦向きを切り替えると変更されます。

API レベル 13 で追加。

"smallestScreenSize" 物理的な画面サイズが変更されました。

これは、画面の向きにかかわらずサイズが変更されたことを表します。つまり、外部ディスプレイに切り替えた場合など、実際に物理的な画面サイズが変わったときにのみ変更されます。この設定の変更は、smallestWidth 設定の変更に対応しています。

API レベル 13 で追加。

"touchscreen" タッチスクリーンが変更されました(これは通常、発生しません)。
"uiMode" ユーザー インターフェースのモードが変更されました。ユーザーが端末をデスクドックやカーホルダーに装着したか、ナイトモードが変更されました。さまざまな UI モードの詳細については、UiModeManager をご覧ください。

API レベル 8 で追加。

これらの設定変更はすべて、アプリによって表示されるリソースの値に影響する可能性があります。したがって、onConfigurationChanged() が呼び出されたときは通常、もう一度すべてのリソース(ビューのレイアウト、ドローアブルなど)を取得して変更を適切に処理する必要があります。

注:マルチウィンドウ関連のすべての設定変更を処理するには、"screenLayout""smallestScreenSize" の両方を使用します。マルチウィンドウは、Android 7.0(API レベル 24)以上でサポートされています。

android:directBootAware

アクティビティがダイレクト ブート対応であるかどうか。つまり、ユーザーが端末をロック解除する前にアクティビティを実行できるかどうかを示します。

注:ダイレクト ブート中にアプリのアクティビティがアクセスできるのは、デバイス保護ストレージに保存されているデータのみです。

デフォルト値は "false" です。

android:documentLaunchMode
アクティビティが起動されるたびに、タスクにアクティビティの新しいインスタンスをどう追加するのかを指定します。この属性は、オーバービュー画面に表示された同じアプリで複数のドキュメントを操作することをユーザーに許可します。

この属性には 4 つの値があり、ユーザーがアプリでドキュメントを開くときに次のような効果を生みます。

説明
"intoExisting" システムは、基本インテントの ComponentName およびデータ URI が起動インテントのものと一致するタスクを検索します。そのようなタスクが見つかると、システムはそのタスクをクリアし、onNewIntent(android.content.Intent) への呼び出しを受け取るルート アクティビティで再起動します。そのようなタスクが見つからなかった場合、システムは新しいタスクを作成します。
"always" ドキュメントが既に開いている場合でも、アクティビティはドキュメントの新しいタスクを作成します。これは、FLAG_ACTIVITY_NEW_DOCUMENT フラグと FLAG_ACTIVITY_MULTIPLE_TASK フラグの両方を設定した場合と同じです。
"none" アクティビティはアクティビティの新しいタスクを作成しません。これはデフォルト値です。FLAG_ACTIVITY_NEW_TASK が設定されている場合にのみ新しいタスクを作成します。オーバービュー画面はデフォルトでアクティビティがタスクを作成したかのように処理し、アプリの 1 つのタスクを表示して、ユーザーが最後に呼び出したアクティビティから再開します。
"never" このアクティビティは、インテントに FLAG_ACTIVITY_NEW_DOCUMENT が含まれていても新しいドキュメントで起動されません。この値を設定すると、FLAG_ACTIVITY_NEW_DOCUMENT フラグと FLAG_ACTIVITY_MULTIPLE_TASK フラグのいずれかがアクティビティで設定されている場合にその動作をオーバーライドし、オーバービュー画面にはアプリの 1 つのタスクが表示され、ユーザーが最後に呼び出したアクティビティから再開します。

注:"none" と "never" 以外の値については、アクティビティを launchMode="standard" で定義する必要があります。この属性が指定されていない場合は、documentLaunchMode="none" が使用されます。

android:enabled
アクティビティをシステムでインスタンス化できるかどうか。インスタンス化できる場合は "true"、できない場合は "false" を指定します。デフォルト値は "true" です。

<application> 要素には、アクティビティを含むすべてのアプリ コンポーネントに適用される独自の enabled 属性があります。システムでアクティビティをインスタンス化できるようにするには、<application> 属性と <activity> 属性の両方を "true" にする必要があります(どちらもこの値がデフォルト)。どちらかを "false" にすると、アクティビティをインスタンス化できません。

android:excludeFromRecents
オーバービュー画面の最近使用したアプリのリストから、このアクティビティで開始したタスクを除外するかどうか。つまり、このアクティビティが新しいタスクのルート アクティビティである場合、この属性によって、最近使用したアプリのリストにタスクを表示するかどうかが決まります。タスクをこのリストから「除外する」場合は "true"、「含める」場合は "false" を設定します。デフォルト値は "false" です。

android:exported
この要素では、アクティビティを他のアプリのコンポーネントから起動できるかどうかを設定します。起動できる場合は "true"、起動できない場合は "false" を指定します。"false" の場合、同じアプリまたは同じユーザー ID を持つアプリのコンポーネントからのみアクティビティを起動できます。

インテント フィルタを使用している場合は、この要素を "false" に設定しないでください。その場合、アプリがアクティビティを呼び出そうとすると、ActivityNotFoundException がスローされます。代わりに、アクティビティにインテント フィルタを設定せずに、他のアプリがアクティビティを呼び出せないようにする必要があります。

インテント フィルタがない場合、この要素のデフォルト値は "false" です。この要素を "true" に設定した場合、アクティビティは、その正確なクラス名を把握しているアプリからアクセス可能になりますが、システムが暗黙的インテントを照合しようとしても解決されません。

この属性は、他のアプリへのアクティビティの公開を制限する唯一の方法ではありません。パーミッションを使用して、アクティビティを起動できる外部エンティティを制限することもできます(permission 属性をご覧ください)。

android:finishOnTaskLaunch
ユーザーがタスクを再起動した(ホーム画面でタスクを選択した)ときに、アクティビティの既存のインスタンスをシャットダウン(終了)するかどうか。シャットダウンする場合は "true"、シャットダウンしない場合は "false" を指定します。デフォルト値は "false" です。

この属性と allowTaskReparenting の両方が "true" の場合は、この属性が優先されます。アクティビティのアフィニティは無視されます。アクティビティの親への再割り当ては行われず、破棄されます。

android:hardwareAccelerated
ハードウェア アクセラレーションによるレンダリングをこのアクティビティに対して有効にするかどうか。有効にする場合は "true"、有効にしない場合は "false" を指定します。デフォルト値は "false" です。

Android 3.0 以降、アプリはハードウェア アクセラレーションによる OpenGL のレンダリングを使用して、多くの一般的な 2D グラフィック操作のパフォーマンスを改善できるようになりました。ハードウェア アクセラレーションによるレンダリングを有効にすると、描画キャンバス、ペイント、Xfermode、ColorFilter、シェーダー、カメラのほとんどの操作が高速化されます。その結果、フレームワークの OpenGL ライブラリを明示的に活用していないアプリでも、アニメーションやスクロールが滑らかになり、全体的な応答性が改善されます。ハードウェア アクセラレーションを有効にすると、必要なリソースが増加するため、アプリの RAM の消費が増加します。

すべての OpenGL 2D 操作が高速化されるわけではない点に注意してください。ハードウェア アクセラレーションによるレンダリングを有効にする場合は、必ずアプリをテストして、レンダラーを使用したときにエラーが発生しないことを確認してください。

android:icon
アクティビティを表すアイコン。このアイコンは、画面上でアクティビティを表す必要があるときに、ユーザーに表示されます。たとえば、タスクを開始するアクティビティのアイコンは、ランチャー ウィンドウに表示されます。アイコンには多くの場合、ラベルが付いています(android:label 属性をご覧ください)。

この属性は、画像の定義を含むドローアブル リソースへの参照として設定する必要があります。設定されていない場合、アプリ全体に指定されたアイコンが代わりに使用されます(<application> 要素の icon 属性をご覧ください)。

アクティビティのアイコン(ここで設定するか、または <application> 要素で設定)も、すべてのアクティビティのインテント フィルタでデフォルトのアイコンになります(<intent-filter> 要素の icon 属性をご覧ください)。

android:immersive
現在のアクティビティの没入モードを設定します。このアクティビティのアプリのマニフェスト エントリで android:immersive 属性が true に設定されている場合、setImmersive() メソッドを使用して実行時に没入モードが変更されても、ActivityInfo.flags メンバーには常に FLAG_IMMERSIVE ビットが設定されます。
android:label
ユーザーが読み取り可能なアクティビティのラベル。アクティビティをユーザーに示す必要があるときに、このラベルが画面上に表示されます。多くの場合、アクティビティ アイコンとともに表示されます。

この属性が設定されていない場合、アプリ全体に指定されたラベルが代わりに使用されます(<application> 要素の label 属性をご覧ください)。

アクティビティのラベル(ここで設定するか、<application> 要素で設定)も、すべてのアクティビティのインテント フィルタでデフォルトのラベルになります(<intent-filter> 要素の label 属性をご覧ください)。

ラベルは文字列リソースへの参照として設定し、ユーザー インターフェースの他の文字列と同様にローカライズできるようにする必要があります。ただし、アプリの開発中は、利便性を考慮して、未加工の文字列として設定することもできます。

android:launchMode
アクティビティの起動方法に関する指示。インテントを処理するためにアクティビティが呼び出されたとき、どう処理するかを判断するため、Intent オブジェクトにはアクティビティ フラグ(FLAG_ACTIVITY_* 定数)と組み合わせて機能するモードが 4 つあります。そのモードは次のとおりです。

"standard"
"singleTop"
"singleTask"
"singleInstance"

デフォルトのモードは "standard" です。

下の表に示すとおり、モードは主に 2 つのグループに分けられます。一方は "standard" アクティビティと "singleTop" アクティビティ、もう一方は "singleTask" アクティビティと "singleInstance" アクティビティです。起動モードが "standard" または "singleTop" のアクティビティは、複数回インスタンス化できます。インスタンスは任意のタスクに属することができ、アクティビティ スタックのどこにでも配置できます。アクティビティは通常、startActivity() を呼び出したタスク内で起動されます(インテント オブジェクトに FLAG_ACTIVITY_NEW_TASK 命令が含まれている場合を除きます。このような場合は、別のタスクが選択されます。taskAffinity 属性をご覧ください)。

一方、"singleTask" および "singleInstance" アクティビティは、タスクの開始のみ可能です。これらは常に、アクティビティ スタックのルートに存在します。さらに、端末はアクティビティのインスタンスを一度に 1 つだけ保持できます。タスクは 1 つだけです。

"standard" モードと "singleTop" モードの違いは、1 点だけです。"standard" アクティビティが新しいインテントを受け取るたびに、クラスの新しいインスタンスが作成され、そのインテントに応答します。各インスタンスは 1 つのインテントを処理します。同様に、新しいインテントを処理するために、"singleTop" アクティビティの新しいインスタンスが作成されることもあります。ただし、ターゲット タスクについて、アクティビティの既存のインスタンスがスタックの一番上に既に存在する場合は、(onNewIntent() の呼び出しで)そのインスタンスが新しいインテントを受け取ります。新しいインスタンスは作成されません。その他の状況では、たとえば、"singleTop" アクティビティの既存のインスタンスがターゲット タスク内に存在するもののスタックの一番上に配置されていない場合、あるいはスタックの一番上に存在するもののターゲット タスク内ではない場合、新しいインスタンスが作成され、スタック上にプッシュされます。

同様に、現在のスタック上のアクティビティまで UP ナビゲーションを行う場合は、親アクティビティの起動モードによって動作が決まります。親アクティビティの起動モードが singleTop である(または up インテントに FLAG_ACTIVITY_CLEAR_TOP が含まれる)場合、親がスタックの一番上に移動し、その状態が保持されます。ナビゲーション インテントは親アクティビティの onNewIntent() メソッドが受け取ります。親アクティビティの起動モードが standard である場合(さらに up インテントに FLAG_ACTIVITY_CLEAR_TOP が含まれていない場合)、現在のアクティビティとその親はどちらもスタックから消去され、親アクティビティの新しいインスタンスが作成され、ナビゲーション インテントを受け取ります。

"singleTask" モードと "singleInstance" モードの違いも次の 1 点のみです。"singleTask" アクティビティは、他のアクティビティを自身のタスクに含めることができます。このアクティビティは常にタスクのルートに存在しますが、他のアクティビティ(必然的に "standard" アクティビティと "singleTop" アクティビティ)をそのタスク内で起動できます。一方、"singleInstance" アクティビティは、他のアクティビティを自身のタスクに含めることはできません。これがタスク内の唯一のアクティビティです。別のアクティビティを開始すると、そのアクティビティは別のタスクに割り当てられます。FLAG_ACTIVITY_NEW_TASK がインテントに存在する場合と同様です。

ユースケース 起動モード 複数のインスタンスがあるか コメント
ほとんどのアクティビティで使用される通常の起動 "standard" はい デフォルトの設定です。システムは常に、ターゲット タスク内でアクティビティの新しいインスタンスを作成し、そのインスタンスにインテントを渡します。
"singleTop" 条件により異なる アクティビティのインスタンスがターゲット タスクの一番上に既に存在する場合は、システムはアクティビティの新しいインスタンスを作成せずに、onNewIntent() メソッドを呼び出して、インテントをそのインスタンスに渡します。
特別な起動
(一般的な使用には非推奨)
"singleTask" いいえ システムは新しいタスクのルートでアクティビティを作成し、そのアクティビティにインテントを渡します。ただし、アクティビティのインスタンスが既に存在する場合は、システムは新しいインスタンスを作成せずに、onNewIntent() メソッドを呼び出して、インテントを既存のインスタンスに渡します。
"singleInstance" いいえ インスタンスを保持しているタスクでシステムが他のアクティビティを起動しないことを除いて "singleTask" と同じです。アクティビティは常に、そのタスクの唯一のメンバーです。

上の表のとおり、standard はデフォルトのモードで、ほとんどの種類のアクティビティに適切です。SingleTop も一般的で、多くの種類のアクティビティの起動モードとして便利です。それ以外のモード(singleTasksingleInstance)は、ほとんどのアプリに適していません。その理由は、ユーザーにとってなじみがなく、他の大半のアプリとまったく異なるインタラクション モデルであるためです。

どの起動モードを選択した場合でも必ず、起動時、および [戻る] ボタンを使用して他のアクティビティやタスクから戻ったときのアクティビティのユーザビリティをテストしてください。

起動モードおよびインテント フラグを指定したインタラクションの詳細については、タスクとバックスタックのドキュメントをご覧ください。

android:lockTaskMode
端末がロックタスク モードで動作しているときにシステムがこのアクティビティをどのように表示するかを決定します。

Android は、ロックタスク モードと呼ばれる、キオスクのような臨場感あふれる形式でタスクを実行できます。システムがロックタスク モードで動作している際、端末のユーザーは通常、通知を表示したり、ホワイトリストに登録されていないアプリにアクセスしたり、ホーム画面に戻ったりすることはできません(ホームアプリがホワイトリストに登録されている場合を除く)。システムがロックタスク モードに設定されているときには、デバイス ポリシー コントローラ(DPC)によってホワイトリストに登録されているアプリのみを実行できます。ただし、システムアプリと特権アプリは、ホワイトリストに登録されていなくても、ロックタスク モードで実行することができます。

値には、次の R.attr.lockTaskMode 文字列値のいずれかを指定できます。

説明
"normal" デフォルト値。この値がデフォルトです。タスクはロックタスク モードで起動しませんが、startLockTask() を呼び出すことでそこに配置できます。
"never"

タスクはロックタスク モードで起動せず、端末のユーザーはオーバービュー画面からこれらのタスクを固定することはできません。

注:このモードは、システムアプリと特権アプリでのみ使用可能です。この値が指定された非特権アプリは normal として処理されます。

"if_whitelisted" DPC が DevicePolicyManager.setLockTaskPackages() を使用してこのパッケージを許可している場合、このモードは always と同じです。ただし、それが最後にロックされたタスクである場合、アクティビティは、終了する前に stopLockTask() を呼び出す必要があります。DPC がこのパッケージを許可していない場合、このモードは normal と同じです。
"always"

このアクティビティをルートとするタスクは常に、ロックタスク モードで起動します。このタスクが起動されたときにシステムが既にロックタスク モードで動作していた場合は、現在のタスクに加えて新しいタスクが起動されます。このモードで起動されたタスクがロックタスク モードを終了するには、finish() を呼び出します。

注:このモードは、システムアプリと特権アプリでのみ使用可能です。この値が指定された非特権アプリは normal として処理されます。

この属性は API レベル 23 で導入されました。

android:maxRecents
オーバービュー画面で、このアクティビティをルートとするタスクの最大数。このエントリ数に達すると、システムは使用時期が最も古いインスタンスをオーバービュー画面から削除します。有効な値は 1~50(メモリの少ない端末では 25)で、ゼロは無効です。この値には、50 などの整数値を指定する必要があります。デフォルト値は 16 です。
android:maxAspectRatio
アクティビティがサポートする最大アスペクト比。これよりもアスペクト比が大きい端末でアプリが実行される場合、アプリが自動的にレターボックス表示されて、画面の一部が未使用のままになるため、指定した最大アスペクト比でアプリを実行することができます。最大アスペクト比は、端末の長辺の長さを短辺の長さで割った比率の 10 進数形式として表されます。たとえば、最大アスペクト比が 7:3 である場合、この属性の値を 2.33 に設定します。非ウェアラブル端末では、この属性の値を 1.33 以上にする必要があります。ウェアラブル端末では、1.0 以上でなければなりません。それ以外の値を設定した場合は無視されます。

注: アクティビティで resizeableActivity が true に設定されている場合は、アクティビティが任意のサイズをサポートすることを意味するので、この属性は無視されます。

この属性の詳細については、複数画面をサポートするをご覧ください。

android:multiprocess
アクティビティのインスタンスを、起動元コンポーネントのプロセス内で起動できるかどうか。起動できる場合は "true"、起動できない場合は "false" を指定します。デフォルト値は "false" です。

通常、アクティビティの新しいインスタンスは、それを定義しているアプリのプロセス内で起動されるため、アクティビティのすべてのインスタンスを同じプロセス内で実行します。ただし、このフラグが "true" に設定されていると、アクティビティのインスタンスを複数のプロセスで実行できます。これにより、システムはインスタンスの使用時にいつでもインスタンスを作成できます(そのためのパーミッションが付与されている場合)。この設定はほぼ不要で、使用することは望ましくありません。

android:name
アクティビティを実装するクラスの名前。Activity のサブクラスです。この属性の値には、完全修飾クラス名("com.example.project.ExtracurricularActivity" など)を指定する必要があります。ただし、簡素化する方法として、名前の最初の文字がピリオドの場合(".ExtracurricularActivity" など)、<manifest> 要素で指定されたパッケージ名にそれが付加されます。

アプリを公開したら、この名前は変更できませんandroid:exported="false" を設定している場合を除く)。

デフォルト値はありません。名前を必ず指定してください。

android:noHistory
ユーザーが移動して画面に表示されなくなったアクティビティをアクティビティ スタックから削除して終了する(アクティビティの finish() メソッドを呼び出す)必要があるかどうか。終了する必要がある場合は "true"、終了しない場合は "false" を指定します。デフォルト値は "false" です。

"true" を設定すると、アクティビティの履歴を残さないことを意味します。タスクのアクティビティ スタックに残らないため、ユーザーはそこに戻ることができなくなります。この場合、このアクティビティから結果の別のアクティビティを開始した場合、onActivityResult() は呼び出されません。

この属性は API レベル 3 で導入されました。

android:parentActivityName
アクティビティの論理的な親のクラス名。この名前は、対応する <activity> 要素の android:name 属性に指定したクラス名と一致している必要があります。

ユーザーがアクションバーの Up ボタンを押したときにシステムはこの属性を読み取り、どのアクティビティを開始するかを判断します。また、システムはこの情報を使用して、アクティビティのバックスタックを TaskStackBuilder と合成できます。

API レベル 4~16 をサポートするため、"android.support.PARENT_ACTIVITY" の値を指定する <meta-data> 要素を設定した親アクティビティを宣言することもできます。次に例を示します。

<activity
    android:name="com.example.app.ChildActivity"
    android:label="@string/title_child_activity"
    android:parentActivityName="com.example.app.MainActivity" >
    <!-- Parent activity meta-data to support API level 4+ -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.app.MainActivity" />
</activity>

Up ナビゲーションをサポートするための親アクティビティの宣言については、Up ナビゲーションの提供に関する記事をご覧ください。

この属性は API レベル 16 で導入されました。

android:persistableMode

端末の再起動後に、アクティビティを含むタスク内でアクティビティのインスタンスをどのように保持するかを定義します。

タスクのルート アクティビティでこの属性の値が persistRootOnly に設定されている場合、ルート アクティビティのみが保持されます。それ以外の場合は、タスクのバックスタックで上位にあるアクティビティが調べられます。これらのアクティビティのうち、この属性の値が persistAcrossReboots に設定されているものが保持されます。

この属性を使用する場合は、その値を次のいずれかに設定する必要があります。

説明
persistRootOnly デフォルト値。システムが再起動されたときに、アクティビティ タスクは保持されますが、ルート アクティビティの起動インテントのみが使用されます。

アプリの起動インテントがアプリのルート アクティビティを読み込む際、アクティビティは PersistableBundle オブジェクトを受け取りません。そのため、onSaveInstanceState() を使用して端末の再起動後もアプリのルート アクティビティの状態を保持することはしないでください。

注:この属性の値は、アプリのルート アクティビティで設定されている場合にのみアプリの動作に影響します。

persistAcrossReboots

このアクティビティの状態は、個々の persistableMode 属性が persistAcrossReboots に設定されている、バックスタックで上位にある各アクティビティの状態とともに保持されます。アクティビティの persistableMode 属性が persistAcrossReboots に設定されていない場合、または Intent.FLAG_ACTIVITY_NEW_DOCUMENT フラグを使用してアクティビティが起動された場合、そのアクティビティと、バックスタックで上位にあるすべてのアクティビティは保持されません。

persistableMode 属性が persistAcrossReboots に設定されているアクティビティをインテントがアプリで読み込む際、アクティビティはその onCreate() メソッドで PersistableBundle オブジェクトを受け取ります。そのため、アクティビティの persistableMode 属性が persistAcrossReboots に設定されている限り、onSaveInstanceState() を使用して、端末の再起動後もアクティビティの状態を保持することができます。

注:この属性の値は、アプリのルート アクティビティ以外のアクティビティで設定されていても、アプリの動作に影響します。

persistNever

アクティビティの状態は保持されません。

注:この属性の値は、アプリのルート アクティビティで設定されている場合にのみアプリの動作に影響します。

この属性は API レベル 21 で導入されました。

android:permission
アクティビティを起動または取得してインテントに応答するために、クライアントに必要なパーミッションの名前。startActivity() または startActivityForResult() の呼び出し元が指定したパーミッションを付与されていない場合、そのインテントはアクティビティに配信されません。

この属性が設定されていない場合、<application> 要素の permission 属性によって設定されたパーミッションがアクティビティに適用されます。どちらの属性も設定されていない場合、アクティビティはパーミッションで保護されません。

パーミッションの詳細については、概要説明のパーミッションのセクションや、別のドキュメントのセキュリティとパーミッションをご覧ください。

android:process
アクティビティを実行する必要があるプロセスの名前。通常、アプリのすべてのコンポーネントはアプリ用に作成されたデフォルトのプロセス名で実行され、この属性を使用する必要はありません。ただし、必要に応じて、デフォルトのプロセス名をこの属性でオーバーライドし、アプリのコンポーネントを複数のプロセスにまたがって実行することができます。

この属性に割り当てられた名前がコロン(:)で始まる場合、新しいプロセスが必要になったときに、アプリ専用のものとして作成され、アクティビティはそのプロセス内で実行されます。プロセス名が小文字で始まる場合、アクティビティはその名前のグローバル プロセス内で実行されます(そのためのパーミッションが付与されている場合)。これにより、さまざまなアプリのコンポーネントがプロセスを共有できるため、リソースの使用を削減できます。

<application> 要素の process 属性は、すべてのコンポーネントに対して異なるデフォルトのプロセス名を設定できます。

android:relinquishTaskIdentity
アクティビティが、タスクスタックで上位にあるアクティビティにタスク識別子を渡すかどうか。タスクのルート アクティビティでこの属性が "true" に設定されている場合、基本インテントが、タスクの次のアクティビティの基本インテントで置き換えられます。次のアクティビティでもこの属性が "true" に設定されている場合は、同じタスクで起動するアクティビティに基本インテントを渡します。この動作は、各アクティビティがこの属性を "false" に設定したアクティビティに到達するまで続きます。デフォルト値は "false" です。

この属性を "true" に設定すると、オーバービュー画面のラベル、カラー、アイコンを変更するためにアクティビティの ActivityManager.TaskDescription の使用も許可されます。

resizeableActivity

アプリでマルチウィンドウ ディスプレイをサポートするかどうかを指定します。<activity> 要素か <application> 要素でこの属性を設定できます。

この属性を true に設定すると、ユーザーは分割画面モードやフリーフォーム モードでアクティビティを起動できます。この属性を false に設定すると、アクティビティはマルチウィンドウ モードをサポートしません。この値が false のとき、ユーザーがアクティビティをマルチウィンドウ モードで起動しようとすると、アクティビティが全画面で表示されます。

アプリが API レベル 24 以上を対象とし、この属性の値を指定していない場合、属性の値はデフォルトで true に設定されます。

この属性は API レベル 24 で追加。

android:screenOrientation
端末上のアクティビティの画面の向き。アクティビティをマルチウィンドウ モードで実行している場合は、システムはこの属性を無視します。

値には次の文字列のいずれかを指定します。

"unspecified" デフォルト値。システムが画面の向きを選択します。システムが使用するポリシー、つまり特定の状況における選択は、端末により異なる場合があります。
"behind" アクティビティ スタック内の直下にあるアクティビティと同じ画面の向き。
"landscape" 横向き(画面の縦方向より横方向のほうが広い)。
"portrait" 縦向き(画面の横方向より縦方向のほうが広い)。
"reverseLandscape" 通常の横向きとは反対方向の横向き。API レベル 9 で追加。
"reversePortrait" 通常の縦向きとは反対方向の縦向き。API レベル 9 で追加。
"sensorLandscape" 横向き。ただし、端末のセンサーに基づいて通常の横向きまたは反対の横向きになります。ユーザーがセンサーに基づく回転をロックしていても、センサーは使用されます。API レベル 9 で追加。
"sensorPortrait" 縦向き。ただし、端末のセンサーに基づいて通常の縦向きまたは反対の縦向きになります。ユーザーがセンサーに基づく回転をロックしていても、センサーは使用されます。API レベル 9 で追加。
"userLandscape" 横向き。ただし、端末のセンサーおよびユーザーの設定に基づいて通常の横向きまたは反対の横向きになります。API レベル 18 で追加。
"userPortrait" 縦向き。ただし、端末のセンサーおよびユーザーの設定に基づいて通常の縦向きまたは反対の縦向きになります。API レベル 18 で追加。
"sensor" 画面の向きは、端末の方向センサーによって決まります。画面の向きは、ユーザーが端末をどのように持っているかによって異なり、ユーザーが端末を回転すると変わります。端末によってはデフォルトで、回転しても 4 つの画面の向きすべてを使用できるわけではありません。4 つの画面の向きすべてを使用するには、"fullSensor" を使用します。ユーザーがセンサーに基づく回転をロックしていても、センサーは使用されます。
"fullSensor" 画面の向きは、端末の方向センサーによって決まり、4 つの画面の向きすべてを使用できます。これは "sensor" と似ていますが、端末の通常の動作にかかわらず、4 つの画面の向きすべてを使用できる点が異なります(たとえば、一部の端末では通常、反対の縦向きや反対の横向きは使用しませんが、それらの向きも有効になります)。API レベル 9 で追加。
"nosensor" 画面の向きは、物理的な方向センサーを参照せずに決まります。センサーは無視されるため、ユーザーが端末をどのように動かしたかに基づいて、画面の向きが変わるわけではありません。
"user" ユーザーが現在設定している画面の向き。
"fullUser" ユーザーがセンサーに基づく回転をロックしている場合、これは user と同様に動作しますが、ロックしていない場合は fullSensor と同様に動作します。4 つの画面の向きをすべて使用できます。API レベル 18 で追加。
"locked" 現在の向きにかかわらず、画面の向きを現在の向きにロックします。API レベル 18 で追加。

注:横向きまたは縦向きのいずれかの値を宣言すると、アクティビティを実行している画面の向きに対するハード要件と見なされます。したがって、宣言した値を使用して Google Play などのサービスでフィルタできるようになるため、アクティビティが必要とする画面の向きをサポートする端末でのみアプリを使用できます。たとえば、"landscape""reverseLandscape"、または "sensorLandscape" を宣言すると、横向きをサポートする端末でのみアプリを使用できます。ただし、アプリで縦向きまたは横向きにする必要があることを <uses-feature> 要素で明示的に宣言することも必要です。たとえば、<uses-feature android:name="android.hardware.screen.portrait"/> のようになります。これはあくまでも、Google Play(およびフィルタリングをサポートするその他のサービス)が提供するフィルタリングの動作です。プラットフォーム自体は、端末が特定の画面の向きのみをサポートしていても、アプリをインストールできるかどうかを制御しません。

android:showForAllUsers

端末の現在のユーザーが、アクティビティを起動したユーザーと異なる場合にアクティビティを表示するかどうか。この属性は、リテラル値("true" または "false")に設定することも、ブール値を含むリソース属性またはテーマ属性に設定することもできます。

この属性は API レベル 23 で追加。

android:stateNotNeeded
状態を保存しなくても、アクティビティを強制終了して正常に再開できるかどうか。前回の状態を参照しなくても再開できる場合は "true"、前回の状態が必要な場合は "false" を指定します。デフォルト値は "false" です。

通常、アクティビティを一時的にシャットダウンしてリソースを保存する前に、onSaveInstanceState() メソッドが呼び出されます。このメソッドはアクティビティの現在の状態を Bundle オブジェクトに保存します。アクティビティが再開されたら、onCreate() にこのオブジェクトが渡されます。この属性が "true" に設定されていると、onSaveInstanceState() は呼び出されず、onCreate() には Bundle ではなく null が渡されます。つまり、初めてそのアクティビティを開始するときと同じです。

"true" を設定すると、状態が保持されていなくてもアクティビティを再開できます。たとえば、ホーム画面を表示するアクティビティでこの設定を使用すると、なんらかの理由でクラッシュした場合でもアクティビティが削除されることはありません。

supportsPictureInPicture

アクティビティがピクチャー イン ピクチャー表示をサポートするかどうかを指定します。android:resizeableActivity が false の場合、システムはこの属性を無視します。

この属性は API レベル 24 で追加。

android:taskAffinity
アクティビティがアフィニティを持っているタスク。同じアフィニティを持つアクティビティは概念上、同じタスク(ユーザーから見ると同じ「アプリ」)に属します。タスクのアフィニティは、タスクのルート アクティビティのアフィニティによって決まります。

アフィニティによって次の 2 つが決まります。アクティビティの親として再割り当てされるタスク(allowTaskReparenting 属性をご覧ください)と、FLAG_ACTIVITY_NEW_TASK フラグを指定されたアクティビティが開始されたときにアクティビティを格納するタスクです。

デフォルトでは、アプリ内のすべてのアクティビティは同じアフィニティを持ちます。この属性を設定してアクティビティをそれぞれグループ化し、別のアプリで定義されたアクティビティを同じタスク内に配置することもできます。いずれのタスクについてもアクティビティがアフィニティを持たないように指定するには、空の文字列に設定します。

この属性が設定されていない場合、アクティビティは、アプリに設定されたアフィニティを継承します(<application> 要素の taskAffinity 属性をご覧ください)。アプリのデフォルトのアフィニティの名前は、<manifest> 要素で設定されたパッケージ名です。

android:theme
アクティビティの全体的なテーマを定義するスタイル リソースの参照。これにより、このテーマを使用するアクティビティのコンテキストが自動的に設定されます(setTheme() をご覧ください)。また、この属性によって、アクティビティの開始前に(アクティビティの外観にうまく適合するように)「開始」のアニメーションが実行される場合があります。

この属性が設定されていない場合、アクティビティは、アプリ全体に設定されたテーマを <application> 要素の theme 属性から継承します。その属性も設定されていない場合、システムのデフォルトのテーマが使用されます。詳細については、スタイルとテーマのデベロッパー ガイドをご覧ください。

android:uiOptions
アクティビティの UI の追加オプション。

次のいずれかの値を指定する必要があります。

説明
"none"追加の UI オプションはありません。この値がデフォルトです。
"splitActionBarWhenNarrow"(ハンドセットでポートレート モードにしたときなど)水平方向のスペースが限られるときに、画面の下部にバーを追加して、アプリバー(アクションバーとも呼ばれる)にアクション アイテムを表示します。画面の上部のアプリバーに少数のアクション アイテムを表示する代わりに、アプリバーを上部のナビゲーション セクションと下部のアクション アイテムのバーに分割します。これにより、アクション アイテムだけでなく、上部のナビゲーションやタイトル要素にもかなりのスペースを割けるようになります。メニュー項目は 2 本のバーに分割されるのではなく、常にまとめて表示されます。

アプリバーの詳細については、アプリバーの追加のトレーニング クラスをご覧ください。

この属性は API レベル 14 で追加。

android:windowSoftInputMode
アクティビティのメイン ウィンドウが、画面上のソフト キーボードを含むウィンドウとどのように連携するか。この属性の設定は、次の 2 つに影響します。
  • ソフト キーボードの状態。アクティビティにユーザーのフォーカスが移ったとき、ソフト キーボードを非表示にするかどうか。
  • アクティビティのメイン ウィンドウの調整。ソフト キーボードのスペースを確保するためにメイン ウィンドウのサイズを変更して小さくするか、ソフト キーボードでウィンドウの一部が隠れたときに現在のフォーカスを表示できるようにコンテンツをパンニングするか。

この設定には、次の表に記載されたいずれかの値か、または "state..." 値と "adjust..." 値を 1 つずつ組み合わせて指定する必要があります。いずれかのグループで複数の値(複数の "state..." 値など)を設定した場合の結果は不定です。個々の値は垂直バー(|)で区切ります。次に例を示します。

<activity android:windowSoftInputMode="stateVisible|adjustResize" ... >

ここで設定された値("stateUnspecified" と "adjustUnspecified" を除く)は、テーマで設定された値より優先されます。

説明
"stateUnspecified" ソフト キーボードの状態(非表示 / 表示)が指定されていません。システムは適切な状態を選択するか、テーマの設定に従います。

これはソフト キーボードの動作設定のデフォルトです。

"stateUnchanged" アクティビティがフォアグラウンドに移動したとき、ソフト キーボードは非表示 / 表示にかかわらず前回の状態を維持します。
"stateHidden" ユーザーがアクティビティを選択したとき、つまり、ユーザーが別のアクティビティから離れて戻ったのではなく、そのアクティビティを選んで移動したとき、ソフト キーボードは非表示になります。
"stateAlwaysHidden" アクティビティのメイン ウィンドウに入力のフォーカスがあるとき、ソフト キーボードは常に非表示になります。
"stateVisible" 一般的に適切なタイミングで(ユーザーがアクティビティのメイン ウィンドウを選んで移動したとき)ソフト キーボードが表示されます。
"stateAlwaysVisible" ユーザーがアクティビティを選択したとき、つまり、ユーザーが別のアクティビティから離れて戻ったのではなく、そのアクティビティを選んで移動したとき、ソフト キーボードが表示されます。
"adjustUnspecified" アクティビティのメイン ウィンドウのサイズを変更してソフト キーボードのスペースを確保するか、画面上で現在のフォーカスを表示できるようにウィンドウのコンテンツをパンニングするか、指定されていません。システムは、ウィンドウのコンテンツにコンテンツをスクロールできるレイアウト ビューが存在するかどうかに応じて、これらのモードのうちいずれかを自動的に選択します。このようなビューが存在する場合、スクロールによってウィンドウのすべてのコンテンツを小さい領域でも表示できると見なされ、ウィンドウのサイズが変更されます。

これはメイン ウィンドウの動作設定のデフォルトです。

"adjustResize" 画面上のソフト キーボードのスペースを確保するためにアクティビティのメイン ウィンドウは常にサイズが変更されます。
"adjustPan" 画面上のソフト キーボードのスペースを確保するためにアクティビティのメイン ウィンドウのサイズは変更されません。代わりにウィンドウのコンテンツは自動的にパンニングされ、現在のフォーカスがキーボードで隠されることがないため、ユーザーは入力中の内容を常に見ることができます。この方法は一般に、サイズ変更に比べると望ましくありません。ユーザーがソフト キーボードを閉じて、ウィンドウの隠れた部分を操作する必要が生じる可能性があるためです。

この属性は API レベル 3 で導入されました。

導入レベル:
noHistorywindowSoftInputMode は API レベル 3 で追加されました。それ以外のすべての属性は API レベル 1 で導入されました。
関連ドキュメント:
<application>
<activity-alias>