마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

service를 이용하여 앱 종료시키기

0 추천

안녕하세요

스타트업에서 서비스 개발중인 신입 개발자입니다.  고민을 좀 공유하고 싶어 글을 올리게 되었습니다

현재 운영중인 앱에서 개발하고자 하는 기능이 동작하는 시나리오는 다음과 같습니다. 


1. 서버에서 앱 배포작업을 위해 사용자들에게 gcm 전송

2. 서비스하는 앱에 포함된 Service에서 브로드 캐스팅한 gcm의 intent를 받아옴

3. Service의 onReceive에서 앱이 실행중인지(액티비티가 활성화 된 상태 + 백그라운드로 내려간상태 모두 포함) 확인하여 True 일때 앱 종료

위 과정중 현재 문제가 되는 부분은 3번 입니다. 이를 구현하기 위해 제가 한 방법은 다음 두가지입니다.

1). Service에서 앱의 pid 값을 알아내어 android.os.Process.killProcess을 호출하였으나 앱이 활성된 상태에서는 해당 액티비티만 종료되고 백그라운드에 있을때는 아무런 반응이 없습니다. 앱 자체가 종료되어야 하는데 안됩니다.

2).해당 앱의 task stack에 접근하여 stack을 clear 하려고 했습니다. TaskStackBuilder를 통해 접근하려 했으나 새로운 액티비티를 추가하는 메소드밖에 없어서 해결하지 못했네요. 혹시 task stack에서 특정 패키지의 액티비티만 골라서 삭제할 수 있는 방법이 있을까요?

다른 개발자분들께서는 비슷한 사례에서 어떻게 해결하셨는지, 혹은 좋은 아이디어 있으시면 작은 힌트라도 주셨으면 합니다.

읽어주셔서 감사합니다 ^^

ST고고 (140 포인트) 님이 2015년 5월 20일 질문
ST고고님이 2015년 5월 20일 수정

2개의 답변

0 추천

요점이 잘 이해가 가지는 않는데 ..

먼저 A어플의 서비스에서 B어플을 종료하려고 하시는거면 - 아마 불가능할겁니다.

A어플이 활성화중이고 A어플의 서비스에서 GCM 또는 Intent가 들어왔을때 활성화되어있는 액티비티를 종료하는 방법은

저같은경우는 A액티비티의 instans 를 Static으로 정의해서 체크합니다.

 

public static MainActivity mMainInstance;

onCreate에서 mMainInstance = this;

public static MainActivity getMainInstance() {
return mMainInstance;
}
만들어 둔뒤 서비스에서 return값이 null이 아닐때 getMainInstance().finish(); 해줍니다.
 
음무 (17,820 포인트) 님이 2015년 5월 20일 답변
답변 감사합니다.
제가 의도한것은 후자의 경우가 맞습니다. 말씀해주신 방법 참고해보겠습니다 ㅎㅎ
0 추천
비슷한 사례를 만들지 않습니다.

왜냐하면 정상적인 환경에서는 불가능하기 때문입니다.
익명사용자 님이 2015년 5월 20일 답변
...