#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()
его, чтобы обеспечить нулевую безопасность.