我想为长期运行的位置提取任务启动服务。 我选择为该任务使用前台服务。我希望此服务在后台线程中运行。
现在,经过一些搜索,我决定在Service的onStart()
中而不是Activity本身中启动一个新线程。我不希望任何线程泄漏引用Activity。我对Activity被销毁没事。
我的问题是,onStartCommand()
在哪个线程上被调用?当我再次尝试启动服务时会发生什么?
我对线程处理不是很有经验,请指出我所缺少的或错误的。
答案 0 :(得分:1)
onStartCommand总是在主线程上调用。如果要在另一个线程上运行代码,则必须在服务中创建代码。默认情况下,服务不会创建线程(例外:IntentService将创建线程,并从该线程调用onHandleIntent)。
一次仅存在一个服务实例。再次启动它不会创建新的Service对象,但会以新的意图再次调用onStartCommand。如果您不希望创建两个线程,则必须自己阻止。通常,通过保留对该线程的引用,如果不为null,则不创建该线程。