2014-09-26 1 views
0

호출되지 않습니다, 난 그냥 단순히 "unBindMyService"작업을 할 onPause에서이들의 OnDestroy가 나는 onResume에서, 내 MainActivity에 로컬 서비스를 추가

@Override 
public void onResume() { 
    super.onResume() 
    boolean is_start = isMyServiceRunning(MyService.class) 
    if (is_start) { 
     bindMyService() 
    } else { 
     startMyService() 
     bindMyService() 
    } 
} 

했다.

또한 서비스를 바인드하기 위해 Context.BIND_AUTO_CREATE 플래그를 추가합니다. 결과는 매우 이상합니다.

  1. 내가 로그 캣과이면 MyService의 "에서 onCreate"와 "onBind"를 볼 수 있습니다, 이것은 내가 다른 활동 또는 앱으로 전환 할 때 "바인딩 해제"가 정확한지,라고
  2. 부드럽게 간다!
  3. 설정에서 서비스를 강제 종료하면 응답으로 서비스의 "onDestroy"가 호출됩니다.
  4. 앱의 "최근 목록"에서 앱을 제거하면 서비스의 "onDestroy"가 호출되지 않아 서비스가 종료되지 않은 것으로 설명 할 수 있습니다. 또한 OK.
  5. 내가 설명 할 수없는 것은 4 일 후에 다시 응용 프로그램을 시작한 것이고 서비스의 "onCreate"및 "onBind"는 호출되지만 서비스의 단일 "onDestroy"는없는 것으로 나타났습니다. "is_start"가 true 일 때도 "onDestroy"가 호출되지 않고 서비스가 다시 생성됩니다.

그래서 4와 5 사이에 어떤 일이 발생 했습니까? 서비스가 아직 살아 있습니까? 아니면 죽었습니까?

+0

더 많은 코드를 게시하십시오. 메서드에서 무엇이 isMyServiceRunning, startMyService 및 bindMyService입니까? – Okas

+0

smallzhan ... 나는 서비스의 모든 경우를 실행했습니다 ... 나는 여러 가지를 발견했습니다. onething 나는 service에서 ondestroy가 stopservice()가 실행되면 호출 할 수 있다고 말하고 싶습니다. – GvSharma

+1

가능성이 5는 경고없이 살해 된 4와 다른 프로세스에서 발생합니다 - 로그에서 프로세스 ID()를 확인하십시오. –

답변

1

서비스를 중지해야 onDestroy를 호출 할 수 있습니다. 다음을 사용하십시오 :

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    stopService(new Intent(this,MyService.class)); 
} 
+0

예, 'startService'와 'bindService'에 의해 시작된 서비스에서 'unBind'와 'stopService'를 사용하여 서비스를 삭제해야한다는 것을 알고 있습니다. 나는 "stopService"라는 서비스가 없으면 "ALIVE"라고 생각하고 나중에 내 앱에서 바인딩 할 수 있지만 내 문제 설명의 '5'에서 무슨 일이 일어나는가는 서비스가 "ALIVE" bind '가 MainActivity에서 호출되면 서비스가 다시 작성됩니다. – smallzhan

관련 문제