활동에서 서비스를 시작하고 싶습니다.활동에서 서비스를 시작하고 준비가 될 때까지 기다리십시오.
먼저 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를 사용할 수 있습니다.
IntentService를 시도했지만 여전히 작동하지 않습니다. 그런 다음 성공과 함께 AsyncTask로 전환합니다. 하지만 제 경우에는 비동기가 필요 없다는 것을 알아 냈습니다. 실행. service/AsyncTask는 일부 센서 데이터를 기록해야합니다. 디버그 모드에서,''onSensorChanged()''메소드는 메인/UI 스레드에 의해 호출된다는 것을 알았습니다. 내 가정은, 그것이 메인 스레드에 의해 호출되지 않습니다. – timaschew