服务将在哪个线程中运行?

时间:2019-03-18 16:54:16

标签: android service

我有一个Activity A,它通过startService方法启动服务S。
现在,根据文档Service S将在主线程或UI线程上运行
现在我的问题是,当活动A被销毁时,UI线程是否仍然存在?
如果我通过活动A的启动器图标重新打开活动A,将会发生两个UI线程,该怎么办?
非常感谢。

3 个答案:

答案 0 :(得分:1)

在Android平台上:MainThread == UiThread ==“ ApplicationThread”(它实际上并不存在),因此在您的情况下,新的Activity将不会启动新的Service,但是会引发Service的OnStartCommand()方法。该服务将继续在“ ApplicationThread”中运行。

答案 1 :(得分:1)

根据Android开发者文档,

  

服务在其托管过程的主线程中运行;除非您另外指定,否则该服务不会创建自己的线程,也不会在单独的进程中运行。

答案 2 :(得分:0)

当您通过在启动器或主屏幕上单击应用程序的图标来启动应用程序时,Android将使用一个执行线程(即主线程或UI线程)为该应用程序创建一个进程。即使没有启动任何组件,例如Activity, Service, BroadcastReceiver, ContentProvider,该线程也将存在。

然后,它将找到并启动该应用程序的默认或输入活动(在AndroidManifest.xml文件中定义)。

  

我有一个Activity A,它通过startService方法启动服务S。   现在,根据文档Service S将在主线程或   UI线程现在我的问题是,当活动A被销毁时,UI   线程仍然存在?

是的,UI线程仍然存在。

  

如果我通过活动启动器图标重新打开活动A,会发生什么情况   总共会产生两个UI线程吗?

完成活动A后,Android那时不会破坏该应用程序的进程。如果以后再启动应用程序,它将把应用程序保留在内存中以加快加载速度。

因此,当您重新打开活动A时,如果已经存在该应用程序的进程,则活动A在该进程中启动并使用相同的执行线程。否则,Android将为该应用程序创建一个新进程。

  

服务将在哪个线程中运行?

默认情况下,同一应用程序的所有组件(包括Service)都在同一进程和线程(称为主线程或UI线程)中运行。

您可以在此链接中找到更多详细信息:

https://developer.android.com/guide/components/processes-and-threads