한 걸음 두 걸음

액티비티 실행 인텐트에 필요한 Flag 3가지 정리 ] FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP 본문

FrontEnd/Android

액티비티 실행 인텐트에 필요한 Flag 3가지 정리 ] FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP

언제나 변함없이 2019. 7. 14. 18:17
반응형

Activity 생성하고 새로운 인스턴스를 만드는 경우 intent를 사용한다는 것을 대부분 알고 계실 것입니다. 이 때 그냥 startActivity()로 연결해서 만들어버릴 수도 있겠지만, 인텐트에 flag 값을 설정하여 액티비티를 만들 수도 있습니다.

Intent intent = new Intent(this, SubActivity.class);
intent.addFlag(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

이렇게 사용방법(?)을 익혔으니 각 플래그가 어떤 역할을 하는지 알아보도록 하겠습니다.

FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP

FLAG_ACTIVITY_NEW_TASK

새로운 태스크를 생성하여 그 태스크안에 엑티비티를 추가하게 됩니다.

단, 기존에 존재하는 태스크들중에 생성하려는 엑티비티와 유의미한 관계를 가지고 있는 태스크가 있다면 그곳으로 새 액티비티가 들어가게됩니다. 작업을 포그라운드 및 백그라운드로 이동시킬 수 있습니다.특정 작업의 모든 활동은 항상 동일한 순서로 유지됩니다.

FLAG_ACTIVITY_CLEAR_TOP

만약에 태스크에 호출하려는 엑티비티의 인스턴스가 이미 존재하고 있을 경우에 

새로운 인스턴스를 생성하는 것 대신에 존재하고 있는 액티비티를 포그라운드로 가져옵니다.

clear

그리고 호출한 인스턴스를 포그라운드로 가져올때까지 있었던 위의 인스턴스들을 모두 삭제합니다.

위에서 현재 실행중인 초록 인스턴스는 onNewIntent() 메소드에서 시작하는 새 인 텐트를 받거나 완료되어 새로운 인텐트로 다시 시작됩니다.

FLAG_ACTIVITY_SINGLE_TOP

액티비티를 호출할 때 호출된 액티비티의 인스턴스가 현재 태스크의 루트에 이미 실행중인 경우 활동이 재실행되지 않습니다( = 새로운 인스턴스를 생성하지 않습니다.)

그대로

 

출처https://developer.android.com/reference/android/content/Intent.html?hl=ko#FLAG_ACTIVITY_SINGLE_TOP https://tiann.tistory.com/18

반응형