하루에 0.01%라도 성장하자

Develop/Android

현재 액티비티(Activity) 확인하는 법 ( feat. singleTask )

뚠님 2019. 8. 23. 18:22
반응형

현재 액티비트를 확인 해야 하는 상황은 생각보다 많다.

 

나같은 경우는 사이드 메뉴를 사용하다가 작성하는 기능이 필요 했다.

 

사이드 메뉴에 A, B, C 메뉴를 만들고 A를 클릭하면 A Activity로 이동. B를 클릭하면 B Activity로 이동하는 로직이다.

 

이슈가 되었던 건 현재 Activity가 A 인데도 A 메뉴를 누르면 새로운 A Activity가 뜬다는 점이었다.

 

이슈를 확인하고, 현재 Activity를 확인하여 이동해야 하는 메뉴와 같은 Activity라면 이동하지 않는 로직을 만들었다.

 

코드

 

String currentActivityName = getClass().getSimpleName().trim() // 해당 코드를 이용하면 현재 Activity의 파일 명이 나온다.
// ex. MainActivity에서 실행하면 "MainActivity"를 return 하며, 형식은 String이다.


if(!currentActivityName.equals("MainActivity"){
    Intent intent = new Intent(this, MainActivity.class);
    startActivity(intent);
}
// 현재 ActivityName이 MainActivity가 아니라면 이동.

 

이런식의 코드인데, 개발을 해놓고 돌려보니 처음엔 잘 돌아 갔다.

 

만족하고 있는데 A -> B -> A  형태로 메뉴를 이동해 보니 ActivityTask 관리 차원에 문제가 생겼다.

 

내가 원하는 상황은 A Activity가 있으면 B 메뉴를 갔다가 다시 A를 누르면 기존 A Activity가 나왔으면 좋겠는데 위 방식으로는 그건 해결되지 않은 것이다.

 

이럴때 사용하는 것이 AndroidManifest.xml 에서 관리하는 launchMode인데

간단하게 설명하면 아래와 같이 사용한다.

 

AndroidManifest.xml

 

<activity
    android:name=".MainActivity"
    android:launchMode="singleTask"/>

 

AndroidManifest.xml 파일에서 이렇게 launchMode를 설정하면 A Activity가 ActivityTask에 남아 있을 때 새로 A를 만들지 않고 기존에 있는 A를 띄워준다!

 

아!!!?( 깨달음 )

 

A Activity가 미리 생성되어 있으면 A를 다시 만들지 말고 기존에 있는걸 찾아 띄워주는 역할이 singleTask라면, 굳이 제일 위 코드인 className()을 찾아서 분기처리를 해야 할까 ? 안해도 되지 않을까 ???? 라는 생각이 갑자기 들었다.

 

결국 singleTask를 설정해 주면 제일 위 코드는 사용하지 않아도 된다.

 

.....내 시간 ㅠㅠ

반응형