2012-06-08 165 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和進程。在我正在處理的這個項目中,這樣做是爲了節省硬件中由於內存限制造成的內存使用量。任何想法? –

相關問題