Saya memiliki layanan yang terikat dengan konteks aplikasi seperti ini:
getApplicationContext().bindService(
new Intent(this, ServiceUI.class),
serviceConnection,
Context.BIND_AUTO_CREATE
);
protected void onDestroy() {
super.onDestroy();
getApplicationContext().unbindService(serviceConnection);
}
Untuk beberapa alasan, hanya kadang-kadang konteks aplikasi tidak terikat dengan benar (saya tidak dapat memperbaiki bagian itu), namun di onDestroy () saya melakukan unbindservice
yang melemparkan kesalahan
java.lang.IllegalArgumentException: Service not registered: tools.cdevice.Devices$mainServiceConnection.
Pertanyaan saya adalah: Apakah ada cara untuk memanggil unbindservice
dengan aman atau memeriksa apakah sudah terikat ke layanan sebelum melepaskan ikatannya?
Terima kasih sebelumnya.
Coba ini:
boolean isBound = false;
...
isBound = getApplicationContext().bindService( new Intent(getApplicationContext(), ServiceUI.class), serviceConnection, Context.BIND_AUTO_CREATE );
...
if (isBound)
getApplicationContext().unbindService(serviceConnection);
Catatan:
Anda harus menggunakan konteks
yang sama untuk mengikat layanan dan melepaskan layanan. Jika Anda mengikat Layanan dengan getApplicationContext()
, maka Anda juga harus menggunakan getApplicationContext.unbindService(..)
Di sini Anda dapat menemukan penjelasan dan kode sumber yang bagus tentang bagaimana bekerja dengan layanan terikat. Dalam kasus Anda, Anda harus mengganti metode (onServiceConnected
dan onServiceDisconnected
) dari objek ServiceConnection
. Kemudian Anda dapat memeriksa variabel mBound
dalam kode Anda.
Melakukan apa yang diusulkan oleh Andrey Novikov tidak berhasil bagi saya. Saya langsung mengganti:
getApplicationContext().unbindService(serviceConnection);
Dengan:
unbindService(serviceConnection);