尝试在后台线程中启动已经运行的服务

时间:2019-07-06 06:27:46

标签: android performance android-service android-thread

我想为长期运行的位置提取任务启动服务。 我选择为该任务使用前台服务。我希望此服务在后台线程中运行。

现在,经过一些搜索,我决定在Service的onStart()中而不是Activity本身中启动一个新线程。我不希望任何线程泄漏引用Activity。我对Activity被销毁没事。

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

我对线程处理不是很有经验,请指出我所缺少的或错误的。

1 个答案:

答案 0 :(得分:1)

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

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