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

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">
        ...
        ...

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

非常感谢任何启示。谢谢!

1个回答

2
一个清单文件只能拥有一个应用程序。通常情况下,两个应用程序不能共享同一进程,但是您可以使用android:process属性来覆盖此限制(请参见下文)。
此外,Service中的代码在与应用程序中的Activities相同的线程中运行,即UI线程。
如果您在同一个应用程序中有多个服务,则它们与应用程序位于同一进程中,全部在同一个线程上运行。
为了解决这个问题,您可以为应用程序指定一个进程名称,并为服务指定一个进程名称。请参见android:process属性。
这将为每个服务提供一个单独的线程,因为每个进程都有自己的线程。
但是,根据您使用服务的方式,您可能更喜欢拥有多个IntentService类。它们都在与您的应用程序相同的进程中运行,但它们各自拥有自己的线程,不同于UI线程。
当然,您也可以手动编写多个线程来实现同一服务,但这更难以正确实现。

嗨,乔,谢谢你提供有用的信息。但是我的意思是,两个具有不同AndroidManifest.xml文件的应用程序共享相同的用户ID和进程。在我正在处理的项目中,这么做是为了节省硬件内存限制引起的内存使用量。你有什么想法? - Surya Wijaya Madjid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接