В своей деятельности я использую сервисное соединение, чтобы получить экземпляр моего сервиса, как вы. Достаточно стандартный код.
val sampleData = "This is a sample string"
var isBound = false
private val mSrvConnection = object : ServiceConnection {
override fun onServiceConnected(className: ComponentName, service: IBinder) {
val binder = service as ForegroundServerService.ForegroundServerBinder
serviceInstance = binder.getService()
serviceInstance.myMethod(sampleData)
}
override fun onServiceDisconnected(name: ComponentName) {
isBound = false
}
}
srvIntent = Intent(this@MyActivity, ForegroundServerService::class.java)
isBound = bindService(srvIntent, mSrvConnection, Context.BIND_AUTO_CREATE)
В документации для ServiceConnection onServiceDisconnected
указано, что она:
Вызывается при потере соединения с Сервисом. Обычно это происходит, когда процесс, в котором размещается служба, потерпел крах или был остановлен. Это не удаляет само ServiceConnection - эта привязка к службе останется активной, и вы получите вызов {@link #onServiceConnected}, когда служба будет запущена в следующий раз.
Так что мне кажется, что сервис можно убить и восстановить в любое время.
Мой вопрос: В редких случаях, когда мой сервис убивают, что происходит с моим serviceInstance
в это время? Это становится нулевым? Вызывает ли это исключение, если я звоню serviceInstance.myMethod(sampleData)
?
Я не могу найти никакой документации о том, что происходит. Мне нужно использовать мой сервис из разных мест, и я не уверен, стоит ли мне прилагать усилия, чтобы проверить, является ли он нулевым, всегда ли мне нужно проверять isBound
или просто позвонить serviceInstance.myMethod(sampleData)
, не беспокоясь ни о чем.