Pertama sekali, saya mempunyai perpustakaan lib, yang mentakrifkan Perkhidmatan:
<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>
Sekarang, tambahkan dua apl yang telah memperkenalkan pustaka ini, kemudian panggil apl tersebut dalam kod masing-masing:
startService(new Intent(context, SharedService.class))
Apa yang saya fikirkan sekarang ialah hanya ada satu SharedService
的實(shí)例,在進(jìn)程com.lib.aidl.SharedService
dalam sistem.
Tetapi keadaan sebenar ialah terdapat dua SharedService
的實(shí)例,它們都在進(jìn)程名為com.lib.aidl.SharedService
proses, tetapi ID proses adalah berbeza. kenapa begitu?
Saya kini mahu hanya satu SharedService
的實(shí)例,當(dāng)?shù)诙握{(diào)用startService
時(shí)回調(diào)onStartCommand
kaedah muncul dalam sistem Adakah ini mungkin?
將
android:process="com.lib.aidl.SharedService"
替換成
android:process=":com.lib.aidl.SharedService"
試試
注意,加了個(gè) ':'
Nama proses di mana perkhidmatan akan dijalankan. Biasanya, semua komponen aplikasi dijalankan dalam proses lalai yang dibuat untuk aplikasi itu. Ia mempunyai nama yang sama dengan pakej aplikasi. <aplikasi> atribut proses elemen boleh menetapkan lalai yang berbeza untuk semua komponen. Tetapi komponen boleh mengatasi lalai dengan atribut prosesnya sendiri, membolehkan anda menyebarkan aplikasi anda merentasi berbilang proses.
Jika nama yang diberikan kepada atribut ini bermula dengan titik bertindih (':'), proses baharu, peribadi kepada aplikasi, dibuat apabila ia diperlukan dan perkhidmatan berjalan dalam proses itu. Jika nama proses bermula dengan aksara huruf kecil, perkhidmatan akan berjalan dalam proses global nama itu, dengan syarat ia mempunyai kebenaran untuk berbuat demikian. Ini membolehkan komponen dalam aplikasi berbeza berkongsi proses, mengurangkan penggunaan sumber.