Intent.FLAG_ACTIVITY_CLEAR_TASK와 Intent.FLAG_ACTIVITY_TASK_ON_HOME의 차이점
Android 문서에서 :
FLAG_ACTIVITY_CLEAR_TASK
Context.startActivity ()에 전달 된 Intent에 설정된 경우이 플래그는 활동이 시작되기 전에 활동과 연관된 기존 태스크가 지워지도록합니다. 즉, 활동은 비어있는 작업의 새로운 루트가되고 이전 활동은 완료됩니다. FLAG_ACTIVITY_NEW_TASK와 함께 만 사용할 수 있습니다.
과
FLAG_ACTIVITY_TASK_ON_HOME
Context.startActivity ()에 전달 된 Intent에 설정된 경우이 플래그는 새로 시작되는 작업이 현재 홈 활동 작업 (있는 경우) 위에 배치되도록합니다. 즉, 작업에서 뒤로를 누르면 사용자가 마지막으로 본 활동이 아니더라도 항상 사용자가 집으로 돌아갑니다. FLAG_ACTIVITY_NEW_TASK와 함께 만 사용할 수 있습니다.
다음 두 스 니펫을 고려하십시오.
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
과
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
내가 이해하는 방식으로 두 코드 스 니펫에서 활동 만있는 새 작업을 만들고 뒤로 누르면 홈 화면으로 이동합니다. 내가 아마도 착각했다고 가정하면 둘의 차이점은 무엇입니까? 또한 다른 스 니펫이 있으면 Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_CLEAR_TASK어떻게 동작할까요?
두 스 니펫간에 차이가 있습니다. 다음은 몇 가지 중요한 배경 정보입니다.
작업에는 활동 스택이 포함됩니다. 작업은 포 그라운드 또는 백그라운드에있을 수 있습니다.
작업도 "스택"됩니다. 당신이 작업에 있다면
A당신은 새로운 작업을 시작B, 작업은B작업 위에 쌓인됩니다A. 사용자가 task에서 BACK 키를 충분히 누르면B결국`A '로 돌아갑니다. 이것은 표준 Android 동작입니다.
스 니펫 ...
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
...에 따라 다음 작업 중 하나를 수행합니다.
- 경우
Activity현재 작업 (예 :이 코드가 실행되는 작업)와 같은 작업 친화력이, 현재의 작업 (작업의 모든 활동을 마무리) 지우고의 새 인스턴스를 시작합니다Activity현재 작업에. 사용자가 BACK 키를 누르면이 작업이 완료Activity되고 현재 작업도 완료되고 (작업에 활동이 하나만 있으므로) 사용자를 홈 화면 또는이 작업을 시작한 작업 (아래에있는 작업)으로 돌아갑니다. 이 작업은 작업 스택에서). - 경우
Activity현재 작업과 다른 작업 친화력을 가지고 있으며, 그 작업 선호도와 기존 작업은 이미있는 (예 : 기존 작업Activity에 속하는 것)가 다음 작업을 기존하는에서 (삭제 전경, 모든 활동을하게된다 작업이 완료되면의 새 인스턴스Activity가 작업의 루트에 생성되고이 작업이 현재 작업의 맨 위에 놓입니다 (Activity완료되면 사용자가 현재 작업으로 돌아갑니다). - 경우
Activity현재 작업과 다른 작업 친화력을 가지고 있으며, 새로운 작업이 생성되는 작업 친 화성, 그리고 새로운 인스턴스와 기존 작업이없는Activity작업의 루트에 생성되고이 작업은 현재의 상단에 넣어 작업 (Activity완료되면 사용자가 현재 작업으로 돌아갑니다).
이 코드 스 니펫 ...
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
...에 따라 다음 중 하나를 수행합니다.
- 경우
Activity현재 작업 (예 :이 코드가 실행되는 작업)와 같은 작업 친화력을 가지고 있으며,Activity현재 작업의 루트 활동을하고,이 아무것도 할 것입니다. 새 작업을 시작하지 않고 활동을 지우지 않으며의 새 인스턴스를 만들지Activity않으며 현재 작업이 완료 될 때 발생하는 동작을 변경하지 않습니다 (예 : 현재 작업이 시작된 경우). 다른 작업은 현재 작업의 모든 활동이 완료되면 사용자를 작업 스택의 이전 작업으로 다시 떨어 뜨립니다. - 경우
Activity(예 :이 코드가 실행되는 작업) 현재 작업과 동일한 작업 친화력을 가지고Activity있다 되지 현재 작업의 루트 활동이 단순히의 새로운 인스턴스를 생성합니다Activity현재 활동의 상단에 넣어 현재 작업에서. 새 작업을 시작하지 않고 활동을 지우지 않으며 현재 작업이 완료 될 때 발생하는 동작을 변경하지 않습니다 (예 : 현재 작업이 다른 작업에 의해 시작된 경우, 현재 작업의 모든 활동이 작업이 완료되면 사용자가 작업 스택의 이전 작업으로 돌아갑니다.) - 경우
Activity현재 작업과 다른 작업 친화력을 가지고 있으며, 그 작업 선호도와 기존 작업을 이미 있습니다 (예 : 기존 작업Activity에 속하는 것)과Activity작업을 기존의 후 기존 작업이 데려 있다는 것을의 루트 활동 포 그라운드 및 해당 작업은 작업 스택에서 분리됩니다 (예 : 해당 작업의 모든 활동이 완료되면 해당 작업을 시작한 작업이 아닌 홈 화면으로 사용자를 반환합니다 ). - 경우
Activity현재 작업과 다른 작업 친화력을 가지고 있으며, 그 작업 선호도와 기존 작업은 이미있는 (예 : 기존 작업Activity에 속하는 것)하고Activity있다 하지 작업을 기존의 후 기존 작업 가져되는 것을의 루트 활동 해당 작업이 작업 스택에서 분리되고 (즉, 해당 작업의 모든 활동이 완료되면 해당 작업을 시작한 작업이 아닌 홈 화면으로 돌아갑니다 )의 새 인스턴스Activity가 생성됩니다. 해당 작업의 기존 활동 위에 배치합니다. - 경우
Activity현재 작업과 다른 작업 친화력을 가지고 있으며, 새로운 작업이 생성되는 작업 친 화성, 그리고 새로운 인스턴스와 기존 작업이없는Activity작업 스택에서 분리하는 작업과 새 작업의 루트에 생성됩니다 (Activity완료되면 사용자는 시작된 작업이 아닌 홈 화면으로 돌아갑니다 .)
마지막으로이 스 니펫 ...
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
...에 따라 다음 작업 중 하나를 수행합니다.
- If
Activityhas the same task affinity as the current task (ie: the task from which this code is executing), it will clear the current task (finish all activities in the task) and launch a new instance ofActivityinto the current task. If the user presses the BACK key, this will finishActivityand also finish the current task (since there is only 1 activity in the task) and return the user to the HOME screen. - If
Activityhas a different task affinity than the current task, and there is already an existing task with that task affinity (ie: an existing task thatActivitywould belong to), then that existing task is brought to the foreground, cleared (all activities in the task are finished), a new instance ofActivityis created at the root of the task and this task is decoupled from the task stack (so that whenActivityfinishes, the user is returned to the HOME screen). - If
Activityhas a different task affinity than the current task, and there is no existing task with that task affinity, a new task is created and a new instance ofActivityis created at the root of the task and this task is decoupled from the task stack (so that whenActivityfinishes, the user is returned to the HOME screen).
I realize that this answer is long and complicated, but there are just so many different cases. I probably haven't even covered all the possible cases (for example, if Activity has a special launch mode)...
ReferenceURL : https://stackoverflow.com/questions/21833402/difference-between-intent-flag-activity-clear-task-and-intent-flag-activity-task
'programing' 카테고리의 다른 글
| moq의 속성에 값을 할당하는 방법은 무엇입니까? (0) | 2021.01.18 |
|---|---|
| nginx 프록시 서버에서 요청 헤더 전달 (0) | 2021.01.18 |
| Jenkins 콘솔 출력에서 에코 끄기 (0) | 2021.01.18 |
| Laravel 5.1로 원시 쿼리를 실행하는 방법은 무엇입니까? (0) | 2021.01.18 |
| Express 미들웨어의 req.locals vs. res.locals vs. res.data vs. req.data vs. app.locals (0) | 2021.01.18 |