我想從活動開始服務。從活動開始服務並等待其準備就緒
首先我用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()
行是最後一行,那麼活動和服務就可以正常啓動。
如何啓動獨立於活動的服務?我也讓他們相互溝通。該活動應調用兩種方法(開始和停止記錄),服務應發送消息。對於第二我可以使用LocalBroadcast。
我嘗試了一個IntentService,但它仍然不起作用。然後我切換到一個成功的AsyncTask。但在我的情況下,我發現,我不需要異步。執行。服務/ AsyncTask應記錄一些傳感器數據。在調試模式下,我看到,''onSensorChanged()''方法是由主/ UI線程調用的。我的假設是,它不會被主線程調用。 – timaschew