Связанный сервис приводит к утечке памятиAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Связанный сервис приводит к утечке памяти

Сообщение Anonymous »

Я написал базовый привязанный сервис на основе документации Android, но LeakCanary сообщил мне, что из сервиса произошла утечка.
  • Есть ли утечка или я неправильно настроил LeakCanary?
  • Как написать связанный сервис, который не будет утечек?
Код
h2>

class LocalService : Service() {

private val binder = LocalBinder()
private val generator = Random()

val randomNumber: Int
get() = generator.nextInt(100)

inner class LocalBinder : Binder() {
fun getService(): LocalService = this@LocalService
}

override fun onBind(intent: Intent): IBinder {
return binder
}

override fun onDestroy() {
super.onDestroy()
LeakSentry.refWatcher.watch(this) // Only modification is to add LeakCanary
}
}


Если я привязываюсь к сервису из действия следующим образом, LeakCanary обнаруживает утечку сервиса

class MainActivity: Activity() {

private var service: LocalService? = null
private val serviceConnection = object: ServiceConnection {
override fun onServiceConnected(name: ComponentName?, binder: IBinder?) {
service = (binder as LocalBinder).getService()
}
override fun onServiceDisconnected(name: ComponentName?) {
service = null
}
}

override fun onStart() {
super.onStart()
bindService(Intent(this, LocalService::class.java), serviceConnection, BIND_AUTO_CREATE)
}

override fun onStop() {
super.onStop()
service?.let {
unbindService(serviceConnection)
service = null
}
}
}



├─ com.example.serviceleak.LocalService$LocalBinder
│ Leaking: NO (it's a GC root)
│ ↓ LocalService$LocalBinder.this$0
│ ~~~~~~
╰→ com.example.serviceleak.LocalService
​ Leaking: YES (RefWatcher was watching this)


Подробнее здесь: https://stackoverflow.com/questions/562 ... aks-memory
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»