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
Activity
has 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 ofActivity
into the current task. If the user presses the BACK key, this will finishActivity
and also finish the current task (since there is only 1 activity in the task) and return the user to the HOME screen. - If
Activity
has a different task affinity than the current task, and there is already an existing task with that task affinity (ie: an existing task thatActivity
would belong to), then that existing task is brought to the foreground, cleared (all activities in the task are finished), a new instance ofActivity
is created at the root of the task and this task is decoupled from the task stack (so that whenActivity
finishes, the user is returned to the HOME screen). - If
Activity
has 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 ofActivity
is created at the root of the task and this task is decoupled from the task stack (so that whenActivity
finishes, 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 |