我想从活动开始服务。从活动开始服务并等待其准备就绪
首先我用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