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

알람 브로드캐스트를 이용하여 서비스 작동시 서비스 중복문제

0 추천
알람 브로드캐스트를 이용하여 조건에 따라 서비스를 실행시키고 있습니다.

알람 브로드캐스트는 1분마다 실행주기를 설정하였으며 조건만족시 Service를 실행시킵니다.

service가 실행이 되면 내부에서 Thread를 새로만들어 일정시간을 돌린후 trhead와 service를 종료시킬려고 합니다.

계획대로라면 문제가 없겠지만 알람 브로드캐스트 부분이 문제였습니다.

service가 실행중인것을 알면 알람브로드캐스트가 발생해도 service를 실행시키지 않으면 좋을려만 계속해서 service를 실행시킬까봐 무섭습니다.

윗부분은 제가 잘알지 못하는 부분입니다. 위와같은 상황일때 서비스가 중복이 되는지 궁금합니다.

 

요약 : 1분마다 알람브로드캐스트를 이용하여 서비스를 실행시키며 서비스 내부에서 thread를 돌립니다. 하나의 서비스만(서비스가 중복되는지는 잘모릅니다.)돌리고 싶은데 만약 서비스가 중복이 된다면 1분마다 서비스를 실행시킬것이며 thread또한 여러게 생성되어 어플에 문제가 될까봐 걱정이됩니다.

하나의 서비스와 하나의 thread만 돌리고싶은데 서비스가 이미실행되어있는것을 알고 서비스를 실행시키지 않을만한 명령어가 어떤것이 있을까요 ?

감사합니다!
yeop5 (430 포인트) 님이 2018년 4월 15일 질문
죄송합니다. 재대로 검색하니 oncreate부분에 thread를 생성하면 되는거군요...
하지만 이럴경우 thread는 중복되지 아니하나 service는 중복될까봐 걱정이 생기는데 이런경우도 괜찮을까요 ? 제생각에는 서비스는 중복되지 않는것 같습니다.
onStartCommand부분에
Thread thread1 = new BackgroundThread();
        thread1.start();
이렇게 새로운 thread1을 생성하고있습니다.


 class BackgroundThread extends Thread {
        public void run() {
            while(true) {
                try {

                    Thread.sleep(1000);



                } catch(InterruptedException ex) {
                    Log.e("SampleJavaThread", "Exception in thread.", ex);
                }
            }
        }
    }
Thread구현부분에서는 gps정보를 일정시간동안 지속적으로 받을 생각입니다.
2시간정도 받기위해서 while문을 사용하고 있는데 맞는 방법이겠죠 ?

1개의 답변

0 추천
 
채택된 답변
1. 버튼 두 개 있는 화면을 만드시고, 하나는 서비스 시작, 하나는 서비스 종료를 하게 만들고, 마구 눌러보세요. 서비스가 어떻게 동작하는지 알아내면 이해하기 편하실 겁니다.

2. '신호를 받으면, 2시간동안 위치 정보를 받는다' 를 사용하고 싶으시면 쓰레드가 아니라 구글에서 만든 위치 가져오는 예제가 있으니 그걸 사용하는게 더 낫습니다. RxGPS 같은 라이브러리도 있고요.

3. 최근 버전 안드로이드부터는 서비스를 2시간 동안 켜놓지 못하게 바뀌었다고 하니 그것도 알아보세요. 서비스가 아니라 다른 방법으로 실행해야할 수도 있습니다.
쎄미 (162,410 포인트) 님이 2018년 4월 16일 답변
yeop5님이 2018년 4월 16일 채택됨
...