我想从 Activity 启动服务。
首先,我使用 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。