履歴画面(概要画面とも呼ばれる)、最近のタスク システムレベルの UI です。最近アクセスしたアプリを アクティビティやタスクなどです。 ユーザーはリスト内を移動し、目的のタスクを選択して タスクの再開や削除ができます。
履歴画面はドキュメント中心の model - Android 5.0(API)で導入 あります。この場合、複数のインスタンスが 異なるドキュメントを含む同じアクティビティを、 履歴画面たとえば Google ドライブには、 いくつか見ていきましょう。各ドキュメントは [履歴] タブにタスクとして表示される screen:
<ph type="x-smartling-placeholder">もう一つの一般的な例は、ユーザーがブラウザを使用していて、 共有 >Gmail。Gmail アプリの [作成] 画面が表示されます。[ [最近] ボタンをクリックすると、Chrome と Gmail が別々に実行されていることがわかります。 タスク:
<ph type="x-smartling-placeholder">通常、タスクやアクティビティをどのように定義するかは、 [履歴]画面に表示されます変更する必要はありません。 確認します。ただし、アプリがアクティビティを表示する方法とタイミングを決定できます。 履歴画面
「
ActivityManager.AppTask
クラスを使用すると、タスクと、リソースのアクティビティ フラグを管理できます。
Intent
クラスを使用すると、
履歴画面でアクティビティを追加または削除する。また、
<activity>
属性を使用すると、
指定することもできます。
履歴画面にタスクを追加する
Intent
クラスのフラグを使用して以下を行います。
タスクを追加すると、ドキュメントを開いたり、開いたりするタイミングや方法を
履歴画面で再度開いています。
<activity>
属性を使用すると、
常に新しいタスクでドキュメントを開くか、既存のタスクを再利用するかを選択する
設定されます。
インテント フラグを使用してタスクを追加する
アクティビティの新しいドキュメントを作成するときに、
startActivity()
メソッドを呼び出し、アクティビティを起動するインテントを渡します。論理演算子を
ユーザーのアクティビティを [履歴] セクションで新しいタスクとして扱います。
渡すには、
FLAG_ACTIVITY_NEW_DOCUMENT
addFlags()
のフラグ
次の呼び出しを行う Intent
のメソッド
できます。
FLAG_ACTIVITY_MULTIPLE_TASK
を設定した場合
新しいドキュメントの作成時にフラグを設定すると、システムは常に
ターゲット アクティビティをルートとして指定します。この設定により、同じドキュメントを
複数のタスクで開かれています。次のコードは、メイン
次のアクティビティを行います。
Kotlin
fun createNewDocument(view: View) { val newDocumentIntent = newDocumentIntent() if (useMultipleTasks) { newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK) } startActivity(newDocumentIntent) } private fun newDocumentIntent(): Intent = Intent(this, NewDocumentActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS) putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++) }
Java
public void createNewDocument(View view) { final Intent newDocumentIntent = newDocumentIntent(); if (useMultipleTasks) { newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); } startActivity(newDocumentIntent); } private Intent newDocumentIntent() { boolean useMultipleTasks = checkbox.isChecked(); final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class); newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++); return newDocumentIntent; } }
メイン アクティビティが新しいアクティビティを起動すると、システムは
あるタスクについて、そのインテントがインテント コンポーネント名と
そのアクティビティのインテント データが返されます。タスクが見つからない場合、または含まれているインテントの場合
FLAG_ACTIVITY_MULTIPLE_TASK
フラグを設定すると、アクティビティをルートとして新しいタスクが作成されます。
システムがインテントのコンポーネント名と一致するインテントを持つタスクを見つけた場合に、
そのタスクを前面に出し、新しいインテントを
onNewIntent()
。
新しいアクティビティがインテントを取得し、履歴に新しいドキュメントを作成する
クリックします。
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_new_document) documentCount = intent .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0) documentCounterTextView = findViewById(R.id.hello_new_document_text_view) setDocumentCounterText(R.string.hello_new_document_counter) } override fun onNewIntent(newIntent: Intent) { super.onNewIntent(newIntent) /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this Activity will be reused. */ setDocumentCounterText(R.string.reusing_document_counter) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new_document); documentCount = getIntent() .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0); documentCounterTextView = (TextView) findViewById( R.id.hello_new_document_text_view); setDocumentCounterText(R.string.hello_new_document_counter); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this activity is reused to create a new document. */ setDocumentCounterText(R.string.reusing_document_counter); }
アクティビティ属性を使用してタスクを追加する
アクティビティは、マニフェストで、常に新しいアクティビティを起動するように指定することもできます。
<activity>
を使用してタスクを実行します。
属性 android:documentLaunchMode
。
この属性には 4 つの値があり、ユーザーが
アプリケーションでドキュメントを開きます。
intoExisting
- アクティビティがドキュメント用に既存のタスクを再利用します。これは、Terraform でインフラストラクチャを
FLAG_ACTIVITY_NEW_DOCUMENT
フラグを設定せずにFLAG_ACTIVITY_MULTIPLE_TASK
使用する必要があります。詳しくは、 インテント フラグを使用してタスクを追加するセクション always
- ドキュメントが新しいドキュメントであっても、アクティビティはドキュメント用に新しいタスクを作成します。
すでに開いています。この値を使用することは、
FLAG_ACTIVITY_NEW_DOCUMENT
フラグとFLAG_ACTIVITY_MULTIPLE_TASK
フラグ。 none
- アクティビティは、ドキュメント用に新しいタスクを作成しません。最近 screen では、アクティビティはデフォルトとして処理されます。1 つのタスクが表示されます。 ユーザーが最後に呼び出したアクティビティから再開します。
never
- アクティビティは、ドキュメント用に新しいタスクを作成しません。この値を設定する
動作をオーバーライド
FLAG_ACTIVITY_NEW_DOCUMENT
およびFLAG_ACTIVITY_MULTIPLE_TASK
使用できます。インテントと履歴画面でこのいずれかが設定されている場合 アプリのタスクが 1 つ表示され、 ユーザーが最後に呼び出した場所です。 で確認できます。
タスクを削除する
デフォルトでは、ドキュメント タスクは履歴画面から自動的に終了します
呼び出すことができます。この動作をオーバーライドするには、
ActivityManager.AppTask
クラスを Intent
フラグ、または
<activity>
属性。
[履歴] 画面からタスクをいつでも完全に除外するには、
<activity>
属性
android:excludeFromRecents
true
に送信。
スペースに含めることができるタスクの最大数を
[履歴] 画面を変更するには、
<activity>
属性
android:maxRecents
を
整数値。タスクの最大数に達すると、
最も長い間使われていないタスクが履歴画面に表示されなくなります。デフォルトは 16 です
最大値は 50(メモリが少ないデバイスでは 25)です。低い値
無効です。
AppTask クラスを使用してタスクを削除する
履歴画面で新しいタスクを作成するアクティビティでは、次のことができます。
タスクを削除してそれに関連するすべてのアクティビティを終了するタイミングを指定する
呼び出し
finishAndRemoveTask()
メソッド:
Kotlin
fun onRemoveFromOverview(view: View) { // It is good pratice to remove a document from the overview stack if not needed anymore. finishAndRemoveTask() }
Java
public void onRemoveFromRecents(View view) { // The document is no longer needed; remove its task. finishAndRemoveTask(); }
完了したタスクを保持する
アクティビティが履歴に残っていても、履歴画面にタスクを残す場合
完了したら、
FLAG_ACTIVITY_RETAIN_IN_RECENTS
[
次のメソッドの addFlags()
メソッド:
アクティビティを起動するインテントです。
Kotlin
private fun newDocumentIntent() = Intent(this, NewDocumentActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS) putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, getAndIncrement()) }
Java
private Intent newDocumentIntent() { final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class); newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT | android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS); newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, getAndIncrement()); return newDocumentIntent; }
同じ効果を得るには、
<activity>
属性
android:autoRemoveFromRecents
false
まで。ドキュメント アクティビティのデフォルト値は true
、ドキュメント アクティビティの場合は false
です。
実施できます。この属性を使用すると、
FLAG_ACTIVITY_RETAIN_IN_RECENTS
フラグ。
最近の URL の共有を有効にする(Google Pixel のみ)
Android 12 以降を搭載した Google Pixel デバイスでは、リンクを共有できます 最近表示したウェブ コンテンツに [履歴] 画面から直接アクセスできます。訪問後 ユーザーは、履歴画面にスワイプしてアプリを見つけることができます。 次に、リンクボタンをタップしてコンテンツをコピーまたは共有します。 URL を入力します。
<ph type="x-smartling-placeholder">どのようなアプリでも、ウェブ UI を提供してユーザーの履歴リンクを有効にできます。
オーバーライド
onProvideAssistContent()
次のように指定します。
Kotlin
class MainActivity : AppCompatActivity() { protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } fun onProvideAssistContent(outContent: AssistContent) { super.onProvideAssistContent(outContent) outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage")) } }
Java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onProvideAssistContent(AssistContent outContent) { super.onProvideAssistContent(outContent); outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage")); } }