アクティビティからサービスを開始したい。
まず、LocalBinder で試してみました。これは機能しますが、サービスはアクティビティにバインドされています。アクティビティがなくなったときにサービスを停止したくありません。LocalBinder で解決策が見つからなかったので、削除してこれを試しました:
サービスでシングルトン インスタンスを使用し、新しいスレッドで startService メソッドを呼び出し、インスタンスが使用可能になるまで待機します。
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()
行が最後になると、アクティビティとサービスが正常に開始されます。
アクティビティから独立したサービスを開始するには? 私はまた、彼らがお互いに通信できるようにしました。アクティビティは 2 つのメソッド (記録の開始と停止) を呼び出し、サービスはメッセージを送信する必要があります。2 つ目は、LocalBroadcast を使用できます。