Rumah > Soal Jawab > teks badan
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
的实例,在进程com.lib.aidl.SharedService
dalam sistem.
Tetapi keadaan sebenar ialah terdapat dua SharedService
的实例,它们都在进程名为com.lib.aidl.SharedService
proses, tetapi ID proses adalah berbeza. kenapa begitu?
Saya kini mahu hanya satu SharedService
的实例,当第二次调用startService
时回调onStartCommand
kaedah muncul dalam sistem Adakah ini mungkin?
PHP中文网2017-05-16 13:23:35
将
android:process="com.lib.aidl.SharedService"
替换成
android:process=":com.lib.aidl.SharedService"
试试
注意,加了个 ':'
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.