Android - 如何在Activity关闭后服务继续运行?

时间:2011-12-02 17:27:33

标签: java android multithreading android-service

我对服务如何运作有点困惑,特别是这两件事:

来自http://developer.android.com/guide/topics/fundamentals/services.html

  

当应用程序组件(例如活动)通过调用startService()启动它时,服务“启动”。一旦启动,服务可以无限期地在后台运行,即使启动它的组件被销毁。

和:

  

警告:服务在其托管进程的主线程中运行 - 该服务不会创建自己的线程,也不会在单独的进程中运行(除非您另行指定)。

我的问题:

  1. 如果主Activity线程退出,那么startService()启动的服务是如何生存的?或者只有那些服务在主Activity关闭时存活,这是在一个单独的线程中?

  2. 如何在单独的线程中启动服务? http://developer.android.com/guide/topics/fundamentals/services.html#ExtendingService的开发文档仅显示了在创建服务时如何生成线程的示例...而不是如何在新线程中生成服务本身...
    编辑:manifest.xml中的android:process=用于在单独的线程中启动吗? (如果它在一个新进程中启动它,那么它必须在一个单独的线程中。)

2 个答案:

答案 0 :(得分:6)

引用你:

  

警告:服务在其托管进程的主线程中运行 - 该服务不会创建自己的线程,也不会在单独的进程中运行(除非您另行指定)。

当主要活动关闭时,并不一定意味着托管进程退出。根据文档,该服务继续运行,因为该过程还活着!

检查this

  

只要服务已启动或客户端绑定服务,Android系统就会尝试保持托管服务的进程。当内存不足并且需要杀死现有进程时,托管服务的进程的优先级将更高

因此,只有当资源不足并且需要杀死周围的进程时,您的进程才会被终止。其他。这个过程依然存在,你的服务也会如此。

答案 1 :(得分:4)

  1. 启动的服务可以在启动它的活动关闭后继续存在,其方式与一个活动可以在使用startActivity()启动它的另一个活动关闭后的生存方式完全相同。活动和服务只是申请流程的两个独立组成部分。一旦开始,每个都独立存在。 (绑定服务的情况有点不同 - 当系统不再绑定任何绑定服务时,系统将关闭绑定服务。)

  2. 您无法在单独的线程中启动服务,只能在非事件线程中启动活动。您只能要求系统启动该服务(通过startService()bindToService())。系统始终在事件线程上启动服务。