작업 및 백 스택

작업은 사용자가 앱에서 어떤 작업을 하려고 할 때 상호작용하는 활동의 모음입니다. 이러한 활동은 백 스택이라는 스택에 각 활동이 열리는 순서로 정렬됩니다.

예를 들어 이메일 앱에는 새 메시지 목록을 표시하는 활동이 하나 있을 수 있습니다. 사용자가 메시지를 선택하면 해당 메시지를 볼 수 있는 새 활동이 열립니다. 이 새로운 활동은 백 스택에 추가됩니다. 그런 다음 사용자가 '뒤로'를 탭하거나 '뒤로' 동작을 취하면 새 활동이 종료되고 스택에서 사라집니다.

작업의 수명 주기 및 작업의 백 스택

기기의 메인 화면이 대다수 작업의 시작 지점입니다. 사용자가 앱 런처나 홈 화면에서 앱 또는 바로가기 아이콘을 터치하면 앱의 작업이 포그라운드로 전환됩니다. 앱에 관한 작업이 없으면 새 작업이 생성되고 앱의 기본 활동이 스택의 루트 활동으로 열립니다.

현재 활동이 다른 활동을 시작하면 새 활동이 스택 맨 위에 푸시되고 포커스를 갖게 됩니다. 이전 활동은 스택에 남아 있지만 중지됩니다. 활동이 중지되면 시스템은 활동의 사용자 인터페이스의 현재 상태를 유지합니다. 사용자가 뒤로 작업을 실행하면 현재 활동이 스택의 맨 위에서 팝되고 소멸됩니다. 이전 활동이 재개되고 UI의 이전 상태가 복원됩니다.

스택의 활동은 다시 정렬되지 않으며 현재 활동에서 시작되고 사용자가 뒤로 버튼이나 동작을 통해 닫을 때만 스택에 푸시되고 스택에서 팝됩니다. 따라서 백 스택은 후입선출 객체 구조로 작동합니다. 그림 1은 활동이 백 스택으로 푸시되고 백 스택에서 팝되는 타임라인을 보여줍니다.

그림 1. 작업의 새로운 각 활동이 백 스택에 항목을 추가하는 방식을 나타냅니다. 사용자가 뒤로를 탭하거나 뒤로 동작을 취하면 현재 활동이 소멸되고 이전 활동이 다시 시작됩니다.

사용자가 계속해서 '뒤로'를 탭하거나 '뒤로' 동작을 하면 사용자가 홈 화면 또는 작업이 시작되었을 때 실행 중이었던 활동으로 돌아갈 때까지 스택의 각 활동이 팝되어 이전 활동을 표시합니다. 모든 활동이 스택에서 삭제되면 이 작업은 더 이상 존재하지 않습니다.

루트 런처 활동의 뒤로 탭 동작

루트 런처 활동은 ACTION_MAINCATEGORY_LAUNCHER를 모두 사용하여 인텐트 필터를 선언하는 활동입니다. 이러한 활동은 앱 런처에서 앱으로의 진입점 역할을 하고 작업을 시작하는 데 사용된다는 점에서 고유합니다.

사용자가 루트 런처 활동에서 뒤로를 탭하거나 뒤로 동작을 취하면 시스템은 기기에서 실행 중인 Android 버전에 따라 이벤트를 다르게 처리합니다.

Android 11 이하에서의 시스템 동작
시스템이 활동을 완료합니다.
Android 12 이상에서의 시스템 동작

시스템은 활동을 종료하는 대신 활동과 활동을 백그라운드로 이동합니다. 이 동작은 홈 버튼이나 동작을 사용하여 앱에서 나갈 때 기본 시스템 동작과 일치합니다.

대부분의 경우 이 동작은 사용자가 콜드 상태에서 앱을 완전히 다시 시작할 필요 없이 웜 상태에서 앱을 더 빠르게 재개할 수 있음을 의미합니다.

맞춤 뒤로 탐색을 제공해야 하는 경우 onBackPressed()를 재정의하는 대신 AndroidX Activity API를 사용하는 것이 좋습니다. 시스템 뒤로 탭을 가로채는 구성요소가 없으면 AndroidX Activity API는 자동으로 적절한 시스템 동작을 따릅니다.

그러나 앱이 onBackPressed()를 재정의하여 뒤로 탐색을 처리하고 활동을 종료하는 경우 완료하는 대신 super.onBackPressed()를 호출하도록 구현을 업데이트합니다. super.onBackPressed()를 호출하면 적절한 경우 활동과 그 작업을 백그라운드로 이동하고 앱 간에 사용자에게 더 일관된 탐색 환경을 제공합니다.

백그라운드 및 포그라운드 작업

그림 2. 두 작업: 작업 B가 포그라운드에서 사용자 상호작용을 수신하는 동안 작업 A는 백그라운드에서 재개를 기다리고 있습니다.

작업은 사용자가 새 작업을 시작하거나 홈 화면으로 이동할 때 백그라운드로 이동할 수 있는 응집 단위입니다. 작업의 모든 활동은 백그라운드에 있는 동안 중지되지만 작업의 백 스택은 그대로 유지됩니다. 그림 2와 같이 다른 작업이 실행되는 동안 이 작업은 포커스를 잃습니다. 그러면 작업이 포그라운드로 돌아가서 사용자가 중단한 부분부터 이어서 할 수 있습니다.

스택에 세 개의 활동(현재 활동 아래에 두 개 포함)이 있는 현재 작업 A의 다음과 같은 작업 흐름을 고려하세요.

  1. 사용자가 홈 버튼이나 동작을 사용한 다음 앱 런처에서 새 앱을 시작합니다.

    홈 화면이 표시되면 작업 A가 백그라운드로 전환됩니다. 새 앱이 시작되면 시스템은 자체 활동 스택과 함께 그 앱 (작업 B)의 작업을 시작합니다.

  2. 사용자는 앱과 상호작용한 후 다시 홈으로 돌아가 원래 작업 A를 시작한 앱을 선택합니다.

    이제 작업 A가 포그라운드로 나옵니다. 스택의 세 활동은 모두 그대로 유지되며 스택 맨 위의 활동이 다시 시작됩니다. 이 시점에서 사용자는 작업 B로 다시 전환할 수도 있습니다. 홈으로 이동하여 해당 작업을 시작한 앱 아이콘을 선택하거나 최근 화면에서 앱의 작업을 선택하면 됩니다.

다중 활동 인스턴스

그림 3. 단일 활동은 여러 번 인스턴스화할 수 있습니다.

백 스택의 활동은 결코 재정렬되지 않으므로, 앱에서 사용자가 두 개 이상의 활동에서 특정 활동을 시작할 수 있도록 허용하는 경우 활동의 이전 인스턴스를 맨 위로 가져오는 것이 아니라 활동의 새 인스턴스가 생성되어 스택으로 푸시됩니다. 따라서 앱의 한 활동은 그림 3과 같이 다른 작업에서도 여러 번 인스턴스화될 수 있습니다.

사용자가 뒤로 버튼이나 동작을 사용하여 뒤로 이동하면 활동 인스턴스는 열린 순서대로 표시되며, 각 인스턴스는 고유한 UI 상태를 갖습니다. 그러나 활동이 두 번 이상 인스턴스화되지 않도록 하려면 이 동작을 수정하면 됩니다. 자세한 내용은 태스크 관리 섹션을 참조하세요.

멀티 윈도우 환경

앱이 Android 7.0 (API 수준 24) 이상에서 지원되는 멀티 윈도우 환경에서 동시에 실행되는 경우 시스템은 각 창의 작업을 별도로 관리합니다. 각 창에는 여러 작업이 있을 수 있습니다. Chromebook에서 실행되는 Android 앱도 마찬가지입니다. 시스템은 작업 또는 작업 그룹을 창별로 관리합니다.

수명 주기 요약

액티비티 및 작업에 대한 기본 동작을 요약하려면:

  • 활동 A가 활동 B를 시작하면 활동 A는 중지되지만 시스템은 스크롤 위치 및 양식에 입력된 텍스트와 같은 상태를 유지합니다. 사용자가 활동 B에 있는 동안 뒤로 동작을 탭하거나 사용하면 상태가 복원된 상태로 활동 A가 재개됩니다.

  • 사용자가 홈 버튼이나 동작을 사용하여 작업을 나가면 현재 활동이 중지되고 작업이 백그라운드로 전환됩니다. 시스템은 작업의 모든 활동 상태를 유지합니다. 사용자가 나중에 작업을 시작한 런처 아이콘을 선택하여 작업을 재개하면 작업이 포그라운드로 나오고 스택 맨 위에서 활동을 재개합니다.

  • 사용자가 '뒤로'를 탭하거나 '뒤로' 동작을 취하면 현재 활동이 스택에서 팝되고 제거됩니다. 스택의 이전 활동이 재개됩니다. 활동이 제거되면 시스템은 활동의 상태를 유지하지 않습니다.

    앱이 Android 12 이상을 실행하는 기기에서 실행되는 경우 루트 런처 활동의 경우 이 동작은 다릅니다.

  • 액티비티는 여러 번 인스턴스화할 수 있으며, 다른 작업에서도 이를 수행할 수 있습니다.

작업 관리

Android는 연속적으로 시작된 모든 활동을 동일한 작업의 후반 선출 스택에 배치하여 작업과 백 스택을 관리합니다. 이는 대부분의 앱에서 잘 작동하며, 일반적으로 활동이 작업과 연결되는 방식이나 백 스택에 존재하는 방식에 관해 걱정할 필요가 없습니다.

그러나 정상적인 동작을 중단시켜야 할 수도 있습니다. 예를 들어 앱의 활동이 현재 작업 내에 배치되는 것이 아니라 시작할 때 새 작업을 시작하도록 할 수 있습니다. 또는 활동을 시작할 때 백 스택 위에 새 인스턴스를 만드는 대신 활동의 기존 인스턴스를 가져오는 것이 좋습니다. 또는 사용자가 작업을 떠날 때 루트 활동을 제외한 모든 활동에서 백 스택을 지우고 싶을 수 있습니다.

<activity> 매니페스트 요소의 속성과 startActivity()에 전달하는 인텐트의 플래그를 사용하여 이러한 작업을 비롯한 많은 작업을 할 수 있습니다.

다음은 태스크를 관리하는 데 사용할 수 있는 주 구성원 <activity> 속성입니다.

다음은 개발자가 사용할 수 있는 주요 인텐트 플래그입니다.

다음 섹션에서는 이러한 매니페스트 속성과 인텐트 플래그를 사용하여 활동이 작업과 연결되는 방식과 백 스택에서 작동하는 방식을 정의하는 방법을 설명합니다.

최근 화면에서 작업과 활동이 표시되고 관리되는 방식에 관한 고려사항도 설명합니다. 일반적으로는 시스템에서 작업과 활동이 최근 화면에 표시되는 방식을 정의하도록 허용하며 이 동작을 수정할 필요가 없습니다. 자세한 내용은 최근 화면을 참고하세요.

실행 모드 정의

실행 모드를 사용하면 활동의 새 인스턴스가 현재 작업과 연결되는 방식을 정의할 수 있습니다. 다음 섹션에 설명된 대로 두 가지 방법으로 시작 모드를 정의할 수 있습니다.

따라서 활동 A가 활동 B를 시작하면 활동 B는 현재 작업과 연결되는 방식을 매니페스트에서 정의할 수 있고 활동 A는 인텐트 플래그를 사용하여 활동 B가 현재 작업과 연결되는 방식을 요청할 수 있습니다.

두 활동이 모두 활동 B가 작업과 연결되는 방식을 정의하면 인텐트에 정의된 대로 활동 A의 요청이 매니페스트에 정의된 활동 B의 요청보다 우선 적용됩니다.

매니페스트 파일을 사용하여 시작 모드 정의

매니페스트 파일에서 활동을 선언할 때 <activity> 요소의 launchMode 속성을 사용하여 활동이 작업과 연결되는 방식을 지정할 수 있습니다.

launchMode 속성에 할당할 수 있는 5가지 실행 모드는 다음과 같습니다.

  1. "standard"
    기본 모드입니다. 시스템은 활동이 시작된 작업에 활동의 새 인스턴스를 만들고 인텐트를 인스턴스로 라우팅합니다. 활동은 여러 번 인스턴스화될 수 있고 각 인스턴스는 서로 다른 작업에 속할 수 있으며 한 작업에는 여러 인스턴스가 있을 수 있습니다.
  2. "singleTop"
    활동 인스턴스가 이미 현재 작업의 맨 위에 있다면 시스템은 활동의 새 인스턴스를 생성하는 대신 onNewIntent() 메서드를 호출하여 인텐트를 이 인스턴스로 라우팅합니다. 활동은 여러 번 인스턴스화되고 각 인스턴스는 서로 다른 작업에 속할 수 있으며 한 작업에는 여러 인스턴스가 있을 수 있습니다 (단, 백 스택 맨 위에 있는 활동이 활동의 기존 인스턴스가 아닌 경우에만).

    예를 들어 작업의 백 스택이 루트 활동 A와 활동 B, C, D가 맨 위에 있는 루트 활동 A로 구성되어 있다고 가정해 보겠습니다 (따라서 스택은 A-B-C-D이고 맨 위에 D가 있음). D 유형 활동의 인텐트가 도착합니다. D에 기본 "standard" 실행 모드가 있으면 클래스의 새 인스턴스가 실행되고 스택은 A-B-C-D-D가 됩니다. 그러나 D의 실행 모드가 "singleTop"이면 D의 기존 인스턴스는 onNewIntent()를 통해 인텐트를 수신합니다. D의 기존 인스턴스가 스택의 맨 위에 있고 스택이 A-B-C-D로 유지되기 때문입니다. 반면에 B 유형 활동의 인텐트가 도착하면 B의 새 인스턴스가 실행 모드가 "singleTop"이더라도 스택에 추가됩니다.

  3. "singleTask"
    시스템이 새 작업의 루트에서 활동을 만들거나 어피니티가 동일한 기존 작업에서 활동을 찾습니다. 활동의 인스턴스가 이미 존재하는 경우 시스템은 새 인스턴스를 만드는 대신 onNewIntent() 메서드를 호출하여 인텐트를 기존 인스턴스로 라우팅합니다. 한편 그 위에 있는 다른 모든 활동은 소멸됩니다.
  4. "singleInstance"
    동작은 "singleTask"와 동일하지만 시스템이 인스턴스를 보유한 작업으로는 다른 활동을 실행하지 않는다는 점이 다릅니다. 활동은 항상 작업의 유일한 단일 멤버입니다. 이 항목으로 시작된 모든 활동은 별도의 작업에서 열립니다.
  5. "singleInstancePerTask"
    활동은 작업의 루트 활동, 즉 작업을 만든 첫 번째 활동으로만 실행할 수 있습니다. 따라서 한 작업에는 이 활동의 인스턴스가 하나만 있을 수 있습니다. singleTask 시작 모드와 달리 이 활동은 FLAG_ACTIVITY_MULTIPLE_TASK 또는 FLAG_ACTIVITY_NEW_DOCUMENT 플래그가 설정되어 있으면 서로 다른 작업의 여러 인스턴스에서 시작할 수 있습니다.

또 다른 예로, Android 브라우저 앱은 <activity> 요소에서 singleTask 시작 모드를 지정하여 웹브라우저 활동이 항상 자체 작업으로 열리도록 선언합니다. 즉, 앱에서 Android 브라우저를 여는 인텐트를 실행하면 앱의 활동이 앱과 동일한 작업에 배치되지 않습니다. 대신 브라우저에 새 작업이 시작되거나 브라우저에 이미 백그라운드에서 실행 중인 작업이 있으면 새 인텐트를 처리하기 위해 이 작업이 전달됩니다.

활동이 새 작업에서 시작되었든, 활동을 시작한 것과 동일한 작업에서 시작되었든 상관없이 뒤로 버튼과 동작은 항상 사용자를 이전 활동으로 이동합니다. 그러나 singleTask 시작 모드를 지정하는 활동을 시작하고 이 활동의 인스턴스가 백그라운드 작업에 있으면 전체 작업이 포그라운드로 전환됩니다. 이 시점에서 백 스택에는 스택 맨 위에서 앞으로 가져온 작업의 모든 활동이 포함됩니다. 그림 4는 이 유형의 시나리오를 보여줍니다.

그림 4. 시작 모드가 "singleTask"인 활동이 백 스택에 추가되는 방식을 나타냅니다. 활동이 이미 자체 백 스택이 있는 백그라운드 작업의 일부인 경우 전체 백 스택도 앞으로 나오며 현재 작업의 맨 위에 배치됩니다.

매니페스트 파일에서 시작 모드를 사용하는 방법에 관한 자세한 내용은 <activity> 요소 문서를 참고하세요.

인텐트 플래그를 사용하여 시작 모드 정의

활동을 시작할 때 startActivity()에 전달하는 인텐트에 플래그를 포함하여 활동과 작업의 기본 연결을 수정할 수 있습니다. 기본 동작을 수정하는 데 사용할 수 있는 플래그는 다음과 같습니다.

FLAG_ACTIVITY_NEW_TASK

시스템이 활동을 새 작업에서 시작합니다. 시작된 활동에 대해 작업이 이미 실행 중인 경우 이 작업은 마지막 상태가 복원된 상태로 포그라운드로 이동하고 활동은 onNewIntent()에서 새 인텐트를 수신합니다.

이렇게 하면 이전 섹션에서 설명한 "singleTask" launchMode 값과 동일한 동작이 생성됩니다.

FLAG_ACTIVITY_SINGLE_TOP

시작 중인 활동이 백 스택 맨 위에 있는 현재 활동인 경우 기존 인스턴스는 활동의 새 인스턴스를 생성하는 대신 onNewIntent() 호출을 수신합니다.

이렇게 하면 이전 섹션에서 설명한 "singleTop" launchMode 값과 동일한 동작이 생성됩니다.

FLAG_ACTIVITY_CLEAR_TOP

시작되는 활동이 현재 작업에서 이미 실행 중인 경우 시스템은 해당 활동의 새 인스턴스를 실행하는 대신 그 위에 있는 다른 모든 활동을 소멸시킵니다. 인텐트는 이제 맨 위에 있는 onNewIntent()를 통해 활동의 재개된 인스턴스로 전달됩니다.

이 동작을 발생시키는 launchMode 속성 값은 없습니다.

FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_NEW_TASK와 함께 가장 자주 사용됩니다. 이러한 플래그를 함께 사용하면 기존 활동을 다른 작업에 찾아 인텐트에 응답할 수 있는 위치에 활동을 배치합니다.

어피니티 처리

어피니티는 활동이 소속되기를 '선호'하는 작업을 나타냅니다. 기본적으로 같은 앱의 모든 활동은 서로 어피니티가 있습니다. 즉, 같은 작업 안에 있는 것을 '선호'합니다.

하지만 활동의 기본 어피니티는 수정할 수 있습니다. 서로 다른 앱에 정의된 활동은 어피니티를 공유할 수 있으며, 동일한 앱에 정의된 활동에 서로 다른 작업 어피니티를 할당할 수 있습니다.

<activity> 요소의 taskAffinity 속성을 사용하여 활동의 어피니티를 수정할 수 있습니다.

taskAffinity 속성은 <manifest> 요소에 선언된 기본 패키지 이름과 달라야 하는 문자열 값을 사용합니다. 시스템이 이 이름을 사용하여 앱의 기본 작업 어피니티를 식별하기 때문입니다.

유사성이 역할을 갖는 것은 다음과 같은 두 가지 상황에서입니다.

  1. 활동을 실행하는 인텐트에 FLAG_ACTIVITY_NEW_TASK 플래그가 포함되어 있는 경우

    기본적으로 새로운 활동은 startActivity()를 호출한 활동의 작업으로 시작됩니다. 호출자와 동일한 백 스택으로 푸시됩니다.

    그러나 startActivity()에 전달된 인텐트에 FLAG_ACTIVITY_NEW_TASK 플래그가 포함되어 있으면 시스템은 새 활동을 수용할 다른 작업을 찾습니다. 이는 종종 새로운 작업입니다. 하지만 반드시 새 작업일 필요는 없습니다. 새 활동과 동일한 어피니티를 가진 기존 작업이 있는 경우 활동이 그 작업으로 시작됩니다. 그렇지 않으면, 새 작업을 시작합니다.

    이 플래그로 인해 활동이 새 작업을 시작하고 사용자가 홈 버튼이나 동작을 사용하여 작업을 떠날 경우 사용자가 작업으로 다시 돌아갈 수 있는 방법이 있어야 합니다. 알림 관리자와 같은 일부 항목은 항상 자체 작업의 일부가 아닌 외부 작업에서 활동을 시작하므로 항상 startActivity()에 전달하는 인텐트에 FLAG_ACTIVITY_NEW_TASK를 배치합니다.

    이 플래그를 사용할 수 있는 외부 항목이 활동을 호출할 수 있다면 사용자가 시작된 작업으로 돌아갈 수 있는 독립적인 방법을 사용자에게 제공해야 합니다(예: 작업의 루트 활동에 CATEGORY_LAUNCHER 인텐트 필터가 있는 런처 아이콘). 자세한 내용은 작업 시작 섹션을 참고하세요.

  2. 활동의 allowTaskReparenting 속성이 "true"로 설정된 경우

    이 경우 활동은 시작된 작업에서 그 작업이 포그라운드로 나올 때 어피니티가 있는 작업으로 이동할 수 있습니다.

    예를 들어 선택한 도시의 기상 상황을 보고하는 활동이 여행 앱의 일부로 정의되었다고 가정해 보겠습니다. 이 활동은 동일한 앱의 다른 활동과 동일한 어피니티(기본 앱 어피니티)를 가지며 이 속성을 사용하여 상위 요소로 재지정할 수 있습니다.

    활동 중 하나가 일기 예보 활동을 시작하면 처음에는 활동과 동일한 작업에 속합니다. 그러나 여행 앱의 작업이 포그라운드로 나오면 일기 예보 활동이 그 작업에 다시 할당되어 작업 안에 표시됩니다.

백 스택 삭제

사용자가 장시간 작업을 떠나면 시스템은 루트 활동을 제외한 모든 활동을 작업에서 삭제합니다. 사용자가 작업으로 돌아오면 루트 활동만 복원됩니다. 시스템은 오랜 시간이 지난 후 사용자가 이전 작업을 중단하고 작업으로 돌아가 새로운 작업을 시작한다는 가정을 기반으로 이러한 방식으로 동작합니다.

이 동작을 수정하는 데 사용할 수 있는 액티비티 특성이 몇 가지 있습니다.

alwaysRetainTaskState
작업의 루트 활동에서 이 속성을 "true"로 설정하면 방금 설명한 기본 동작이 발생하지 않습니다. 작업은 오랜 시간이 지난 후에도 스택의 모든 활동을 유지합니다.
clearTaskOnLaunch

작업의 루트 활동에서 이 속성을 "true"로 설정하면 사용자가 작업을 떠났다가 다시 돌아올 때마다 루트 활동까지 작업이 삭제됩니다. 즉, alwaysRetainTaskState와 반대입니다. 사용자는 작업을 잠시 떠난 후에도 항상 초기 상태의 작업으로 돌아갑니다.

finishOnTaskLaunch

이 속성은 clearTaskOnLaunch와 비슷하지만 작업 전체가 아닌 단일 활동에서 작동합니다. 또한 루트 활동을 제외한 모든 활동이 완료되도록 할 수도 있습니다. "true"로 설정하면 활동은 현재 세션에서만 작업의 일부로 유지됩니다. 사용자가 작업을 떠났다가 다시 돌아오면 이 작업은 더 이상 존재하지 않습니다.

작업 시작

"android.intent.action.MAIN"를 지정된 작업으로, "android.intent.category.LAUNCHER"를 지정된 카테고리로 사용하는 인텐트 필터를 제공하여 활동을 작업의 진입점으로 설정할 수 있습니다.

<activity ... >
    <intent-filter ... >
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    ...
</activity>

이러한 종류의 인텐트 필터를 사용하면 활동의 아이콘과 라벨이 앱 런처에 표시되어 사용자에게 활동을 실행하고 활동이 시작된 후 언제든지 생성된 작업으로 돌아갈 수 있는 방법을 제공합니다.

이 두 번째 능력이 중요합니다. 사용자는 작업을 나갔다가 이 활동 런처를 사용하여 나중에 작업에 돌아올 수 있어야 합니다. 따라서 활동에 ACTION_MAINCATEGORY_LAUNCHER 필터가 있을 때 활동이 항상 작업을 시작하는 것으로 표시하는 두 가지 시작 모드("singleTask""singleInstance")만 사용해야 합니다.

예를 들어 필터가 누락되면 어떤 일이 일어날 수 있는지 상상해 보세요. 인텐트가 "singleTask" 활동을 시작하고 새 작업을 시작하고 사용자가 이 작업에서 일하며 어느 정도 시간을 보냅니다. 그런 다음 사용자는 홈 버튼이나 동작을 사용합니다. 이제 이 작업은 백그라운드로 보내져 눈에 보이지 않습니다. 이제 사용자가 작업으로 돌아갈 방법이 없습니다. 작업이 앱 런처에 표시되지 않기 때문입니다.

사용자가 활동으로 돌아가지 못하게 하려면 <activity> 요소의 finishOnTaskLaunch"true"로 설정하세요. 자세한 내용은 백 스택 삭제 섹션을 참고하세요.

최근 화면에서 작업 및 활동이 표시되고 관리되는 방법에 관한 자세한 내용은 최근 화면에서 확인할 수 있습니다.

추가 리소스