我有一个Activity A通过startService方法启动服务S. 现在根据文档Service S将在主线程或UI线程上运行 现在我的问题是当活动A被销毁时,UI线程是否仍然存在? 如果我通过其启动器图标重新打开活动A会发生什么,总共会产生两个UI线程? 提前致谢。
当您通过点击启动器或主屏幕上的应用程序图标启动应用程序时,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
在Android平台上:MainThread == UiThread ==“ApplicationThread”(它确实不存在),因此在您的情况下,新的Activity不会启动新的Service,而是会引发Service的OnStartCommand()方法。该服务将继续在“ApplicationThread”中运行。
根据Android Developer Doc,
服务在其托管过程的主线程中运行;除非另行指定,否则服务不会创建自己的线程,也不会在单独的进程中运行。