3

假设我有两个应用程序共享相同的用户 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">
        ...
        ...

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

任何启示将不胜感激。谢谢!

4

1 回答 1

2

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

此外,Service 中的代码与应用中的 Activities 运行在同一个线程中,即 UI 线程。

如果您在同一个应用程序中有多个服务,它们与应用程序在同一个进程中,都在同一个线程上。

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

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

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

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

于 2012-06-08T16:49:31.463 回答