본문 바로가기

Android/Bottom-Up

Intent :: setFlags() VS addFlags()

첨부파일 항목을 클릭하면 새로운 액티비티를 띄워서 관련 뷰어를 실행하도록 했다.

Nougat(누가) 버전을 대응하느라 FileProvider를 적용하면서, setFlags()를 addFlags()로 변경해야 관련 뷰어앱이 실행된다. 


        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);





이 둘은 무슨 차이인거지?



우선 flag에 대해서 찾아봤다.
: startActivity()를 호출할때, 새로운 액티비티를 현재 태스크에 넣을것인지 정의하는 값이다.

- FLAG_ACTIVITY_NEW_TASK
 : 액티비티를 새로운 태스크에서 실행한다.
실행하려는 액티비티에 대한 태스크가 이미 실행중이면, 그 태스크는 자신의 마지막 restore된 state로 foreground가 된다. 그리고 액티비티는 onNewIntent() 콜백에서 새로운 인텐트를 받는다.
launchMode의 singleTask 값과 같은 동작을 한다.
- FLAG_ACTIVITY_SINGLE_TOP
 : 실행된 액티비티가 현재 액티비티이면(백스택의 최상위이면), 액티비티의 새로운 객체를 생성하는 대신에 존재하는 액티비티 객체가 onNewIntent() 콜백의 호출을 받는다.
launchMode의 singleTop 값과 같은 동작을 한다. 
- FLAG_ACTIVITY_CLEAR_TOP
 : 실행된 액티비티가 이미 현재 태스크에서 실행중이면, 그 액티비티의 새로운 객체를 실행하는 대신에 태스크의 top에 있는 다른 모든 액티비티들이 destroy된다. 그리고 이 인텐트는 onNewIntent() 콜백을 통해 최상위로 resume된 액티비티 객체에 전달된다.
launchMode의 값과 일치하는것이 없다.





setFlags() VS addFlags()



setFlags()를 사용하면 오래된 flag 전체를 대체한다.

addFlags()를 사용하면 새로운 특정 flag만 붙인다.


flag는 단지 2진수로 이루어진 integer다.

addFlags()는 | operator를 사용해서 유저가 입력한 integer를 붙인다.

'Android > Bottom-Up' 카테고리의 다른 글

Nougat 7+ 대응, FileProvider  (0) 2017.04.18
Bitmap 또는 BitmapFactory.decodeFile 이 null을 리턴할 때  (0) 2017.02.15
아마도 이건 자바 3바퀴  (0) 2015.07.06
What is the "Gradle"?  (0) 2015.06.08