正在尝试在后台线程中启动 运行 服务

Trying to start already running service in background thread

我想为长时间的 运行ning 位置获取任务启动一个服务。 我已选择为此任务使用前台服务。我希望此服务在后台线程中 运行。

现在,经过一番搜索,我决定在服务的 onStart() 中启动一个新线程,而不是 Activity 本身。我不希望引用 Activity 的线程出现任何内存泄漏。我对 Activity 被摧毁没有意见。

我的问题是,onStartCommand() 是在哪个线程上调用的?当我尝试再次启动服务时会发生什么?

我在线程方面不是很有经验,请指出任何我遗漏或错误的地方。

onStartCommand 总是在主线程上调用。如果您想 运行 在另一个线程上编写代码,则必须在您的服务中创建它。默认情况下,服务不会创建线程(例外:IntentService 将创建一个线程,并从该线程调用 onHandleIntent)。

一次只存在一个服务实例。再次启动它不会创建新的服务对象,但它会以新的意图再次调用 onStartCommand。如果您不希望创建两个线程,您必须自己阻止它。通常通过保留对线程的引用并且如果不为空则不创建它。