[android] JobStatus.getUID NullPointerException |
java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.android.server.job.controllers.JobStatus.getUid()' on a null object reference
at android.app.job.JobService$JobHandler.handleMessage(JobService.java:139)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.android.server.job.controllers.JobStatus.getUid()' on a null object reference
at android.os.Parcel.readException(Parcel.java:1546)
at android.os.Parcel.readException(Parcel.java:1493)
at android.app.job.IJobCallback$Stub$Proxy.acknowledgeStopMessage(IJobCallback.java:144)
at android.app.job.JobService$JobHandler.ackStopMessage(JobService.java:183)
at android.app.job.JobService$JobHandler.handleMessage(JobService.java:136)
... 7 more
위와 같은 Exception 이 Crash report 에 계속 올라온다.
주 단말은 JobScheduler 로직을 적용한 OS 중 LOS 와 MOS 에서 발생했다.
Framework 소스 확인 결과 이는 synchronization 이슈로 판단되며, 이는 MOS 6.0.1_r10 ( MR2 ) 에 수정되었다.
따라서 위와 같은 이슈가 자주 발생한다면, 비록 JobScheduler 가 LOS 에서부터 추가되었지만,
LOS 까지는 AlarmManager 를 사용하는 방식으로 구현하는 것을 권장한다.
MOS 는 MOS 초기버전에서는 이슈가 동일하게 발생하지만, MR2 까지는 제조사가 제대로 대응해줬을 것이라 생각하고 JobScheduler 를 사용할지 아니면 MOS 까지 AlarmManager 를 사용할지는 Crash report 비중과 개발자의 선택에 맡겨야 할 것 같다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] JobScheduler 호출 flow 분석 (0) | 2018.04.30 |
---|---|
[android] JobScheduler 의 schedule 이 fail 하는 케이스 (0) | 2018.04.29 |
[android] Framework 혹은 3rd-party lib 이 뿜는 Exception 을 피해보자 ( ex) NullPointerException at acm.a ) (0) | 2018.04.22 |
[android 보안] 사용자 관리 #2 (0) | 2018.04.21 |
[android 보안] 사용자 관리 #1 (0) | 2018.04.20 |
댓글