多个服务共享一个进程,有多少“主”线程?

时间:2012-06-08 16:02:26

标签: android multithreading android-service

假设我有两个应用程序共享相同的用户ID和相同的进程,通过在AndroidManifest.xml中声明:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.myapp.appname1" 
    android:sharedUserId="com.myapp.sharedUserId">

    <application android:process="com.myapp.sharedProcess">
        ...
        ...

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.myapp.appname2" 
    android:sharedUserId="com.myapp.sharedUserId">

    <application android:process="com.myapp.sharedProcess">
        ...
        ...

如果每个应用程序都定义了一个服务并且两个服务器同时运行,尽管它们在同一个进程下运行,它们会为每个应用程序获得一个“主”线程吗?或者他们也分享一个“主”线程?

任何启发都将非常感激。谢谢!

1 个答案:

答案 0 :(得分:2)

每个清单不能有多个应用程序。 两个应用程序通常不能共享相同的进程,但您可以使用android:process属性覆盖它(见下文)。

此外,服务中的代码与应用程序中的活动(即UI线程)在同一个线程中运行。

如果您在同一个应用程序中有多个服务,则它们与应用程序处于相同的进程中,所有这些服务都位于同一个线程中。

要解决此问题,您可以为应用程序指定进程名称,还可以指定服务的进程名称。请参阅android:process属性。

这将为每个服务提供一个单独的线程,因为每个进程当然都有自己的线程。

但是,根据您使用的服务,您可能更喜欢拥有多个IntentService类。它们都在与您的应用程序相同的进程中运行,但它们各自都有自己的线程,这与UI线程不同。

当然,您也可以为同一服务手动编写多个线程,但这很难正确实现。