Что происходит с экземпляром службы, если служба уничтожена? - PullRequest
0 голосов
/ 16 апреля 2020

В своей деятельности я использую сервисное соединение, чтобы получить экземпляр моего сервиса, как вы. Достаточно стандартный код.

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), не беспокоясь ни о чем.

...