котлин.Исключение UninitializedPropertyAccessException в com.yaark.player.Класс обслуживания.онДестрой

#android #android-studio #exception #service

#Android #android-студия #исключение #Обслуживание

Вопрос:

Исключение, вызывающее сбой на некоторых устройствах. В основном сбой обнаружен на устройствах Samsung высокого класса, например. a30, s10

Причина:

 java.lang.RuntimeException: 
at android.app.ActivityThread.handleStopService (ActivityThread.java:4377)
at android.app.ActivityThread.access$1900 (ActivityThread.java:269)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2047)
at android.os.Handler.dispatchMessage (Handler.java:107)
at android.os.Looper.loop (Looper.java:237)
at android.app.ActivityThread.main (ActivityThread.java:7860)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1075)
Caused by: kotlin.UninitializedPropertyAccessException: 
at com.yaark.player.ServiceClass.onDestroy (ServiceClass.java:25)
at android.app.ActivityThread.handleStopService (ActivityThread.java:4357)
at android.app.ActivityThread.access$1900 (ActivityThread.java:269)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2047)
at android.os.Handler.dispatchMessage (Handler.java:107)
at android.os.Looper.loop (Looper.java:237)
at android.app.ActivityThread.main (ActivityThread.java:7860)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1075)
 

код:

 override fun onDestroy() {
        handler.removeCallbacks(serviceRunnable)
        player.reset()
        listener = null
        myService = null
        unregisterReceiver(broadcastReceiver)
        super.onDestroy()  
}
 

Служба остановлена selfStop()

Комментарии:

1. Кажется, что переменная player lateinit amp; найдена неинициализированной при onDestroy() вызове. Убедитесь, что это правильно initialise , либо в onStart или onCreate . Также вы можете проверить, инициализирована ли переменная, а затем вызвать сброс, например: if (this::player.isInitialized) player.reset()

Ответ №1:

Использовать if (this::player.isInitialized) player.reset()

или

объявите player как nullable и используйте player?.reset() его, чтобы обеспечить нулевую безопасность.