IT/Android

[Notification] 안드로이드 앱 중복 실행 문제 완벽 해결 방법

토마토조아 2019. 1. 21. 16:11
728x90

안드로이드 애플리케이션을 개발하다 보면 대부분의 개발자들이 필수적으로 겪는 문제가 있다.

1. 앱 사용중 알림을 누르면 앱이 중복으로 실행되는 문제.

2. 뷰페이져 갱신 문제.

위 2개의 문제는 아주 흔하게 겪는 문제인데, 해결 방법이 찾기가 어렵다. 검색을 해보면 많은 해결 방법들이 우리를 기다리고 있지만 내가 원하는 방향으로 해결되지는 않고.. 흔한데 해결하기 어려운 문제이다.

2. 뷰페이저 갱신 문제는 내 블로그에도 포스팅이 되어 있지만 완벽한 해결방법도 아니고, 성능 또한 떨어지는 문제가 있다. 최근 완전한(?) 꼼수(?) 해결방법을 찾아냈고,(구글링으로 계속 찾아봤지만 원하는 답변은 없었고, 결국 뷰페이저 어댑터를 잘 사용하는 것으로 문제를 해결해냈다.) 곧 포스팅 할 예정이다.
기존 포스팅은 [IT/Android] - ViewPager current view refresh (뷰페이저 현재 뷰 갱신) 이다. 아직은 불완전한 해결 방법의 내용으로 포스팅 된 상태이고, 새로운 내용으로 포스팅을 완료하면 새로운 글 또한 링크로 남기도록 하겠다.


자 그러면 원래의 주제 1. 앱 사용중 알림을 누르면 앱이 중복으로 실행되는 문제. 로 돌아가보자. 이 경우는 아래의 박스처럼 2가지 정도의 경우의 수가 존재하는 것 같다.

  • 앱 사용 중 알림(Notification,노티)을 눌렀는데, 새롭게 앱이 실행되면서, 최근앱 목록에도 새로운 동일한 앱이 리스팅되는 앱 중복 실행인 경우.
  • 앱을 열심히 사용하다가 홈키를 눌러서 나간 상태에서, 앱의 알림(노티)을 눌렀는데 사용하던 스택 상태로 돌아가지 않고 앱이 새로 시작되는 경우.


어쨌든.. 공통적인 문제는 앱이 실행중임에도 새롭게 시작된다는 문제점과 최근앱(Recent) 목록에 동일한 앱이 2개 이상 떠 있다는 것이다.

구글링을 열심히 해보고 다양한 삽질을 해본 결과, 아래의 해결 방법을 찾아냈다.

https://stackoverflow.com/questions/5502427/resume-application-and-stack-from-notification


위의 해답의 핵심은 startActivity 에서 카테고리 설정이었다.

기존 해결 방법들은 Manifest에서 launchMode를 singleTask ,singleInstance, singleTop 로 바꾸라는 둥 각종 삽질의 해답이 우리를 유혹하고 있었고, 실제로 저런 방법이 해결에 도움이 되는 듯 했으나, 액티비티 스택 관리면에서는 완전 이상하게 변해서 오히려 앱 유지보수에 더욱 어려움을 가중시켰다.


새로운 해결 방법은 아래와 같다. 내가 원하는 액티비티를 설정하고, Action과 Category를 아래와 같이 추가하면 어떤 상황에서 알림(노티)을 누르더라도 앱의 마지막 스택 상태로 앱이 보여진다.
앱이 실행중일 때 알림(노티)를 누르면 그냥 아무런 실행없이 현재 상태의 화면이 유지되고, 실행 중 홈키로 나간 상태라면 홈키를 누르기 직전의 마지막 상태로 앱이 띄워진다.

startActivity(new Intent(this, MainActivity.class)
.setAction(Intent.ACTION_MAIN) .addCategory(Intent.CATEGORY_LAUNCHER) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));


앞으로는 괜한 launchMode 같은 부분 건드리지 말고 위의 방법으로 중복 실행 문제를 해결하도록 하자.

728x90