2012-06-04 3 views
1

활동에서 서비스를 시작하고 싶습니다.활동에서 서비스를 시작하고 준비가 될 때까지 기다리십시오.

먼저 LocalBinder를 사용해 보았습니다. 이것은 작동하지만 서비스는 활동에 묶여 있습니다. 활동이 없어지면 서비스를 중단하고 싶지 않습니다.

새 스레드에서 서비스 호출에서 startService 메도를 싱글 인스턴스를 사용하고 인스턴스를 사용할 수있을 때까지 기다립니다 : 나는 LocalBinder와 해결책은 그래서 그것을 제거하지 않으며,이 시도 발견

final Intent recordService = new Intent(RecordActivity.this, RecordService.class); 
    Runnable r = new Runnable() { 
     @Override 
     public void run() { 
      startService(recordService); 
     } 
    }; 
    new Thread(r).start(); 

    Log.i(MMLF.T, "service instance: "+serviceInstance); 
    final ProgressDialog mProgressDialog = ProgressDialog.show(
      RecordActivity.this, "Waiting", "wait until record service is loaded", 
      true); 
    while (serviceInstance == null) { 
     serviceInstance = RecordService.get(); 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException e) { 
      Log.e(MMLF.T, "could not sleep", e); 
     } 
    } 
    mProgressDialog.dismiss(); 

하지만 이것도 효과가 없습니다. 그것은 대기 루프에 갇혔다. 이 대기 물건을 제거하고 새로운 new Thread(r).start() 행이 마지막 인 경우 활동 및 서비스가 정상적으로 시작됩니다.

활동과 독립적으로 서비스를 시작하는 방법은 무엇입니까? 나는 또한 서로 의사 소통을하도록했다. 활동은 두 가지 방법 (녹음 시작 및 중지)을 호출해야하며 서비스는 메시지를 보내야합니다. 두 번째로는 LocalBroadcast를 사용할 수 있습니다.

답변

0

서비스가 이미 활동과 독립적으로 살아 있기 때문에 귀하의 질문이 다소 혼란 스럽습니다. 그러나 서비스는 기본적으로 주 스레드에서 실행됩니다. 서비스를 다른 스레드에서 실행하고 싶다면 Messenger 객체를 설정하고 작업자 스레드와 UI 스레드간에 메시지를 보내야합니다. 또한 AIDL (Messenger가 실제로 구축 된 것)을 사용할 수도 있습니다. 메신저를 사용하지 않으면 의사 소통을 통해 의도를 사용할 수 있습니다. 이 경우 IntentService을 조사해야합니다. 그러나이 메시지는 에 전송할 때만 작동하며 앞뒤로는 작동하지 않습니다. 앞뒤로 의사 소통을 원할 경우 Messenger 또는 이와 유사한 패턴을 사용해야합니다.

그런데 'stop'과 'start'와 같은 목적으로 IntentService를 사용하는 것은 매우 일반적입니다. 일반적으로 메신저 또는 비슷한 것을 사용하여 서비스와 통신 한 백그라운드 스레드가 있으며 작업자 스레드에게 수행해야 할 작업을 지시하는 메시지를 보내고받습니다.

AsyncTask를 살펴보면이 종류의 작업이 훨씬 간단 해집니다.

+0

IntentService를 시도했지만 여전히 작동하지 않습니다. 그런 다음 성공과 함께 AsyncTask로 전환합니다. 하지만 제 경우에는 비동기가 필요 없다는 것을 알아 냈습니다. 실행. service/AsyncTask는 일부 센서 데이터를 기록해야합니다. 디버그 모드에서,''onSensorChanged()''메소드는 메인/UI 스레드에 의해 호출된다는 것을 알았습니다. 내 가정은, 그것이 메인 스레드에 의해 호출되지 않습니다. – timaschew

관련 문제