【发布时间】:2012-06-04 22:45:55
【问题描述】:
我想从一个 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。
【问题讨论】:
标签: android service asynchronous android-activity