首先,我有一個lib函式庫,函式庫裡面定義了以個Service:
<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true">
<service
android:name=".SharedService"
android:process="com.lib.aidl.SharedService"
android:enabled="true"
android:exported="true">
</service>
</application>
現在,加入有兩個app都引進了這個函式庫,然後在各自的程式碼裡都呼叫了:
startService(new Intent(context, SharedService.class))
我現在想的是系統中應該只有一個SharedService
的實例,在進程com.lib.aidl.SharedService
中。
但是實際情況是有兩個SharedService
的實例,它們都在進程名為com.lib.aidl.SharedService
的進程中,但是進程id是不一樣的。這是為什麼?
我現在想讓系統中只出現一個SharedService
的實例,當第二次呼叫startService
時回呼onStartCommand
方法,這個可以做到麼?
PHP中文网2017-05-16 13:23:35
將
雷雷替換成
雷雷嘗試
注意,加了個':'
運行服務的進程的名稱。通常,應用程式的所有元件都在為應用程式建立的預設進程中運行。它與應用程式包具有相同的名稱。 <套用>元素的 process 屬性可以為所有元件設定不同的預設值。但是元件可以使用自己的進程屬性來覆寫預設值,從而允許您將應用程式分佈在多個進程中。
如果分配給該屬性的名稱以冒號(':')開頭,則一個新進程是該應用程式私有的在需要時創建並且服務在該進程中運行。如果進程名稱以小寫字元開頭,則服務將在該名稱的全域進程中運行,前提是它有權這樣做。這允許不同應用程式中的元件共享進程,減少資源使用。