2012-06-08 109 views
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"> 
     ... 
     ... 

如果每个应用程序都有定义的服务,都是尽管在同一个进程下运行,它们每个都会得到一个“主”线程?或者他们也共享一个“主”线程?

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

回答

2

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

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

如果在同一个应用程序中有多个服务,它们与应用程序处于同一进程中,全部在同一线程中。

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

这会给你一个单独的线程为每个服务,因为当然每个进程都有自己的线程。

但是,根据您使用Services for的内容,您可能更愿意拥有多个IntentService类。他们都在同一个进程作为您的应用程序运行,但它们各自拥有自己的线程,它与UI线程不同。

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

+0

嗨,乔,谢谢你的有用信息。但我的意思是,两个应用程序有两个独立的AndroidManifest.xml共享相同的用户ID和进程。在我正在处理的这个项目中,这样做是为了节省硬件中由于内存限制造成的内存使用量。任何想法? –

相关问题