在单独的线程中启动服务

时间:2013-12-31 16:39:21

标签: android multithreading service

在Android文档中,它表示服务在主线程中运行。

如果我在一个单独的线程中启动我的服务会怎样?它仍然在主线程上运行吗?

我不是在清单文件中使用android:process,而是在说:

Thread thread = new Thread(new Runnable() {
    public void run() {
        // Start service
    }
}).start();

别担心,我不会那样做,我只是好奇。

3 个答案:

答案 0 :(得分:3)

startService()在主线程中启动服务(与启动Activity或任何其他组件相同)。无论你从哪个线程调用startService()

来源:http://developer.android.com/reference/android/app/Service.html

“当实际创建服务组件时,由于上述任何一个原因,系统实际执行的所有操作都是实例化组件并在主线程上调用其onCreate()和任何其他适当的回调。”

答案 1 :(得分:0)

文档说默认情况下服务甚至与多线程无关:

  

服务在其托管进程的主线程中运行 - 该服务   没有创建自己的线程...

您可以在此处阅读:http://developer.android.com/guide/components/services.html

您的代码所执行的操作与从主线程以外的线程调用View的函数非常相似。系统不允许你这样做。抛出异常。

答案 2 :(得分:-1)

如果您要求好奇并且不需要任何代码:

首先,您必须了解流程与线程之间的区别(请参阅http://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html

默认情况下,应用中的所有主题都会在应用的流程中触发。 服务本身是一个线程,所以没有理由从一个单独的线程启动它(你通常从主线程启动它,如onCreate方法等。它默认在同一个进程中启动但你可以指定通过在声明中指定process名称来单独处理它,如下所示: http://developer.android.com/guide/topics/manifest/service-element.html