최근 항목 화면(개요 화면, 최근 작업 목록 또는 최근 앱 화면이라고도 함)은 최근에 액세스한 활동 및 작업을 나열하는 시스템 수준 UI입니다. 사용자는 목록을 탐색하거나 재개할 작업을 선택하거나 스와이프하여 목록에서 작업을 삭제할 수 있습니다.
최근 화면은 Android 5.0 (API 수준 21)에서 도입된 문서 중심 모델을 사용합니다. 이 모델에서는 서로 다른 문서가 포함된 동일한 활동의 여러 인스턴스가 최근 화면에 작업으로 표시될 수 있습니다. 예를 들어 Google 드라이브에는 여러 Google 문서 각각에 대한 작업이 있을 수 있습니다. 각 문서는 최근 화면에 작업으로 표시됩니다.
또 다른 일반적인 예는 사용자가 브라우저를 사용하고 공유 > Gmail을 탭하는 경우입니다. Gmail 앱의 편지쓰기 화면이 나타납니다. 이때 최근 버튼을 탭하면 별도의 작업으로 실행되는 Chrome과 Gmail이 표시됩니다.
일반적으로 개발자가 최근 화면에 작업과 활동이 표시되는 방식을 시스템이 정의하도록 허용합니다. 이 동작은 수정할 필요가 없습니다. 그러나 앱은 활동이 최근 화면에 표시되는 방법과 시기를 결정할 수 있습니다.
ActivityManager.AppTask
클래스를 사용하면 작업을 관리할 수 있으며 Intent
클래스의 활동 플래그를 사용하면 최근 화면에서 활동이 추가되거나 삭제되는 시기를 지정할 수 있습니다. 또한 <activity>
속성을 사용하면 매니페스트에서 동작을 설정할 수 있습니다.
최근 화면에 할 일 추가
Intent
클래스의 플래그를 사용하여 작업을 추가하면 최근 화면에서 문서를 열거나 다시 여는 시기와 방법을 더 세부적으로 제어할 수 있습니다. <activity>
속성을 사용하는 경우 항상 새 작업에서 문서를 열지 아니면 문서의 기존 작업을 재사용하도록 선택할 수 있습니다.
인텐트 플래그를 사용하여 작업 추가
활동의 새 문서를 만들 때 startActivity()
메서드를 호출하여 활동을 실행하는 인텐트에 전달합니다. 시스템이 최근 화면에서 활동을 새 작업으로 처리하도록 논리적 중단을 삽입하려면 활동을 시작하는 Intent
의 addFlags()
메서드에 있는 FLAG_ACTIVITY_NEW_DOCUMENT
플래그를 전달합니다.
새 문서를 만들 때 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
을 사용하여 항상 새 작업을 시작하도록 매니페스트에 지정할 수도 있습니다.
이 속성에는 사용자가 애플리케이션으로 문서를 열 때 다음과 같은 효과를 낳는 네 가지 값이 있습니다.
intoExisting
- 활동이 문서에 기존 작업을 다시 사용합니다. 이는 인텐트 플래그를 사용하여 작업 추가 섹션에 설명된 대로
FLAG_ACTIVITY_MULTIPLE_TASK
플래그를 설정하지 않고FLAG_ACTIVITY_NEW_DOCUMENT
플래그를 설정하는 것과 동일합니다. always
- 활동이 문서에 관해 새 작업을 생성하며 이는 문서가 이미 열려 있는 경우에도 마찬가지입니다. 이 값을 사용하는 것은
FLAG_ACTIVITY_NEW_DOCUMENT
플래그와FLAG_ACTIVITY_MULTIPLE_TASK
플래그를 모두 설정하는 것과 같습니다. none
- 활동이 문서의 새 작업을 생성하지 않습니다. 최근 화면은 기본적으로 활동을 처리합니다. 앱의 단일 작업을 표시하며 이 작업은 사용자가 마지막으로 호출한 활동이 무엇이든 관계없이 그 활동부터 다시 시작됩니다.
never
- 활동이 문서의 새 작업을 생성하지 않습니다. 이 값을 설정하면
FLAG_ACTIVITY_NEW_DOCUMENT
및FLAG_ACTIVITY_MULTIPLE_TASK
플래그의 동작이 재정의됩니다. 이 중 하나가 인텐트에 설정되어 있고 최근 화면에 앱의 단일 작업이 표시되면 화면은 사용자가 마지막으로 호출한 활동이 무엇이든 관계없이 그 활동부터 다시 시작합니다.
할 일 목록 삭제
기본적으로 문서 작업은 활동이 완료될 때 최근 화면에서 자동으로 종료됩니다. ActivityManager.AppTask
클래스, Intent
플래그 또는 <activity>
속성을 사용하여 이 동작을 재정의할 수 있습니다.
언제든지 <activity>
속성 android:excludeFromRecents
를 true
로 설정하여 최근 화면에서 작업을 완전히 제외할 수 있습니다.
<activity>
속성 android:maxRecents
를 정수 값으로 설정하여 앱이 최근 화면에 포함할 수 있는 최대 작업 수를 설정할 수 있습니다. 최대 작업 수에 도달하면 가장 오래전에 사용된 작업이 최근 화면에서 사라집니다. 기본값은 16이고 최댓값은 50입니다 (메모리가 적은 기기의 경우 25). 1 미만의 값은 유효하지 않습니다.
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(); }
완료된 작업 보존
최근 화면에서 작업을 유지하려면 활동이 종료되었더라도 활동을 실행하는 인텐트의 addFlags()
메서드에 FLAG_ACTIVITY_RETAIN_IN_RECENTS
플래그를 전달합니다.
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 공유 사용 설정 (Pixel만 해당)
Android 12 이상을 실행하는 Pixel 기기에서 사용자는 최근 화면에서 직접 최근에 본 웹 콘텐츠의 링크를 공유할 수 있습니다. 앱의 콘텐츠를 방문한 후 사용자는 최근 화면으로 스와이프하여 콘텐츠를 본 앱을 찾은 다음 링크 버튼을 탭하여 URL을 복사하거나 공유할 수 있습니다.
모든 앱은 다음 예와 같이 웹 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")); } }