Java Android-在活动关闭后,服务如何可能继续运行?
我对服务的功能有点困惑,尤其是以下两件事: 发件人: 当应用程序组件(如活动)通过调用startService()启动服务时,服务被“启动”。一旦启动,服务可以无限期地在后台运行,即使启动它的组件已被销毁 以及: 警告:服务在其宿主进程的主线程中运行。服务不会创建自己的线程,也不会在单独的进程中运行(除非您另有指定) 我的问题是:Java Android-在活动关闭后,服务如何可能继续运行?,java,android,multithreading,android-service,Java,Android,Multithreading,Android Service,我对服务的功能有点困惑,尤其是以下两件事: 发件人: 当应用程序组件(如活动)通过调用startService()启动服务时,服务被“启动”。一旦启动,服务可以无限期地在后台运行,即使启动它的组件已被销毁 以及: 警告:服务在其宿主进程的主线程中运行。服务不会创建自己的线程,也不会在单独的进程中运行(除非您另有指定) 我的问题是: 如果主活动线程退出,由startService()启动的服务怎么可能存活?或者只有那些在主活动关闭后仍然存在的服务,它们位于单独的线程中 如何在单独的线程中启动服务?
编辑:manifest.xml中的android:process=是否用于在单独的线程中启动它?(如果它在新进程中启动,则它必须在单独的线程中..)
startActivity()启动它的活动后生存一样。活动和服务只是应用程序流程的两个独立组件。一旦启动,每一个都独立存在。(绑定服务的情况有点不同-当不再绑定任何绑定服务时,系统将关闭该绑定服务。)
startService()
或bindToService()
)。系统总是在事件线程上启动服务因此,只有在资源不足并且需要杀死周围的进程时,您的进程才会被杀死。其他的进程将继续存在,您的服务也将继续存在。如果我在manifest.xml中为我的服务指定android:process=“:remote”,会发生什么?它仍将在同一个线程上?@sydd-如果您指定这样的进程名,它确实将在单独的线程中运行,因为它将在单独的进程中运行。但是,该服务仍将在另一个进程的事件线程中运行,因此您仍然需要相应地编写该服务(将耗时的工作放入工作线程中)。@Todd您确定它将在事件线程中运行吗?如果我使用自己的
android:process
创建一个服务,并在其messenger的handleMessage()
方法中放置一个wait(5000)
,它将不会阻塞UI线程。但是,如果我删除android:process
声明,wait命令将阻止UI线程。@sydd-它在另一个进程的事件线程中运行。在等待
结束之前,服务不会响应传入的请求。但是你是对的,它不会阻止另一个进程的UI线程。谢谢,现在我明白了一切。很遗憾,我不能选择两个正确的答案:(谢谢,这完美地回答了我的第一个问题。你能接受这个答案吗?Thanks@Kiran如果我的第二个问题也得到了回答,我会接受。请参阅我的编辑,了解如何解决它。通常您会生成线程来分配负载。但服务本身的目的是在不干扰活动的情况下执行一些繁重的操作。回答这个问题:“你能在一个单独的线程上启动一个活动吗?”。很可能,同样的答案也适用于服务。服务是Android平台的一个宏组件。线程是虚拟机的一个微元素。服务可以生成线程并在其上下文中控制它们。