2014-01-11 2 views
0

저는 다소 이상한 문제가 있습니다. 나는 앱이 열릴 때 내 기본 활동에서 아래 코드를 사용하여 호출하는 바인딩되지 않은 서비스가 있습니다. 서비스는 무엇이든 상관없이 죽지 않을 것입니다.

//some code checks if the service is awake. if not then the code below is called   
Intent serviceIntent = new Intent(this, SMS_Listener_Service.class); 
startService(serviceIntent); 

새로운 SMS가 콘텐츠 관찰자을 보장하기 위해 타이머를 통해 3 초 동안 서비스 대기로 제공

내부의 SMS DB에 데이터를 저장하고있다. 그 후에 그것은 무거운 짐을 싣기 위해 intentservice에 전화를합니다.

은 알 수없는 이유로, 서비스는 때때로 중단됩니다 및

호기심 것은 심지어 응용 프로그램 섹션 나던 일에 서비스를 중지 강제하려는 것입니다 "(이미지 참조) 다시 시작"에 박히면서. 잠시 사라지고 같은 메시지가 다시 나타납니다. 코드에서 stopService를 사용하면 서비스 내에서 OnDestroy 메서드가 호출되지 않습니다. 주변의 유일한 방법은 전화를 다시 시작하는 것입니다.

문제는이 상태에있을 때 작동하지 않는다는 것입니다. 나는 안드로이드 4.3

"와 갤럭시 노트 3이 실행 해요

을 (그 들어오는 SMS 메시지를 구문 분석하는 것을 의미) Hanging Service "

내 생각에 실제 파싱을 수행하는 Intentservice가 완료되지 않으므로 서비스 자체에 대한 호출이 호출되지 않습니다.

제 질문은 멈추려 고 시도했던 intentservice를 강요하는 방법이 있습니까?

여기에 같은 질문의

public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, flags, startId); 

    if (!blnAutoSyncisEnabled) { 
     stopSelf(); 
     return 0; 
    } else { 
     return START_STICKY; 

    } 

} 

더 상세보기 https://stackoverflow.com/posts/21077517/edit

+0

시작으로 서비스에서 모든 코드를 try catch로 래핑하여 서비스가 정상적으로 멈출 수 있도록 예외적으로 반환합니다. – KuriaNdungu

답변

0

이것은 매우 우아한 해결책하지 않을 수 있습니다 서비스 StartCommand의 코드입니다하지만 당신은 서비스의 onCreate() 직접 stopSelf()를 호출 할 수 있습니다 메서드를 호출하고 에 실제 작업을 처리하기 전에 super.onDestroy()에 전화하십시오.

나는 비슷한 방법으로 문제를 해결했다. 어쩌면 이것도 당신의 문제를 해결할 것입니다. 행운을 빕니다. ;)

+0

감사합니다. 이 작업을 시도했지만 서비스가 재시작 모드에있을 때 onDestroy 메서드가 호출되지 않았 음을 알았습니다. 서비스가 실행 중인지 여부를 확인하면 "true"가되지만 중지를 시도하면 작동을 거부합니다. 귀하의 제안에 다시 한 번 감사드립니다. – KuriaNdungu

관련 문제