현재 액티비트를 확인 해야 하는 상황은 생각보다 많다.
나같은 경우는 사이드 메뉴를 사용하다가 작성하는 기능이 필요 했다.
사이드 메뉴에 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를 설정해 주면 제일 위 코드는 사용하지 않아도 된다.
.....내 시간 ㅠㅠ
'Develop > Android' 카테고리의 다른 글
Lottie를 사용해 보자! (0) | 2019.10.16 |
---|---|
WebView에서 노출되는 Player Default Poster 없애기! (2) | 2019.09.19 |
Android ) Handler postDelayed 사용법 (0) | 2019.08.23 |
안드로이드 스튜디오 테마를 변경해보자! (0) | 2019.08.09 |
Kotlin ) 웹 뷰를 이용한 사이트 이동, 검색앱 만들기. (0) | 2019.07.03 |