我有一个关于服务的一般性问题。假设我有一项服务可以做到这一点:
private void finishCountdown() {
playFinishSound();
broadcastFinishedEvent();
logFinishedEventToDatabase();
stopSelf(); // has to stop itself because it's a started service,
// and may need to run again immediately.
}
调用是否stopSelf()
总是要等到前面的语句完成它们正在做的事情?它是否必须等待,或者只是使这些调用足以确保它们完成,而不管服务发生什么?我的应用程序发生了一些奇怪的事情(“一个 SQLiteConnection 对象被泄露了!”,声音有时会被切断并说“媒体播放器在发布之前完成”等),我想知道这是否是原因。
如果这是我不应该做的事情,那么让所有这些事情(广播、播放声音、写入数据库)由服务启动(应该尽快停止)的最佳方式是什么?如果我调用另一个服务来做这件事然后销毁原始服务,我如何确保另一个服务等到所有这些事情都完成后再停止自己?