服务运行哪个线程?

问题描述 投票:0回答:3

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

android service
3个回答
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


1
投票

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


1
投票

根据Android Developer Doc,

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

© www.soinside.com 2019 - 2024. All rights reserved.