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

Android 服务将在哪个线程中运行?,android,service,Android,Service,我有一个活动A,它通过startService方法启动服务S。 现在根据文档,服务将在主线程或UI线程上运行 现在我的问题是,当活动A被销毁时,UI线程还会存在吗如果我通过活动A的启动器图标重新打开活动A,会发生什么?总共会产生两个UI线程吗? 提前感谢。在Android平台上:main thread==UiThread==“ApplicationThread”(它实际上不存在),因此在您的情况下,新活动不会启动新服务,但会引发服务的OnStartCommand()方法。该服务将继续在Andro

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

提前感谢。

在Android平台上:main thread==UiThread==“ApplicationThread”(它实际上不存在),因此在您的情况下,新活动不会启动新服务,但会引发服务的OnStartCommand()方法。该服务将继续在Android平台上的“ApplicationThread”中运行:MainThread==UiThread==“ApplicationThread”(它实际上不存在),因此在您的情况下,新活动不会启动新服务,但会引发服务的OnStartCommand()方法。该服务将继续在“应用程序阅读”中运行。

根据Android开发者文档

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


根据Android开发者文档

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


当你通过点击launcher或主屏幕上的应用图标来启动应用程序时,Android将为该应用程序创建一个进程,其中只有一个执行线程(也称为主线程或UI线程)。即使没有启动任何组件,例如
活动、服务、广播接收器、ContentProvider
,此线程仍将存在

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

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

是的,UI线程仍然存在

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

当您完成活动A时,Android不会在当时破坏应用程序的进程。如果您稍后启动应用程序,它会将应用程序保留在内存中,以便更快地加载

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

服务将在哪个线程中运行

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

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


当您通过单击启动器或主屏幕上的应用图标启动应用程序时,Android将为该应用程序创建一个进程,其中只有一个执行线程(也称为主线程或UI线程)。即使没有启动任何组件,例如
活动、服务、广播接收器、ContentProvider
,此线程仍将存在

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

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

是的,UI线程仍然存在

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

当您完成活动A时,Android不会在当时破坏应用程序的进程。如果您稍后启动应用程序,它会将应用程序保留在内存中,以便更快地加载

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

服务将在哪个线程中运行

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

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


那么活动将从哪个线程开始,它将创建一个名为UI-thread的新线程。当活动被终止时,服务是否可以在没有NetworkMainThreadException或任何ANR的情况下进行网络调用或数据库调用?当一个活动或服务当前正在运行“ApplicationThread”时,将不会终止,因此,任何其他新活动或服务都将在该线程上启动。那么,该活动将在哪个线程中启动,并将创建一个名为UI线程的新线程。当活动被终止时,服务是否可以在没有NetworkMainThreadException或任何ANR的情况下进行网络调用或数据库调用?当一个活动或服务当前正在运行“ApplicationThread”时,将不会终止,因此,任何其他新活动或服务都将在该线程上启动。因此,当活动被终止时,该服务是否可以在没有NetworkOnMainThreadException或线程上任何ANR的情况下进行网络调用或数据库调用?@RahulRawat之前的Android版本3.0,您可以在主线程上进行网络调用或数据库调用。从Android 3.0开始,如果你在主线程上进行网络调用,那么你会得到
NetworkOnMainThreadException
,但这是非常不鼓励的。我想问的是,如果没有活动,只有线程中的服务才会发生,那么它是否也会发生?记住,即使没有启动组件,主线程仍然存在。如果没有活动,只有一个服务,则y