[求助] 安卓在用户哪边报了这样一个错,哪位大神给看看!

2017-01-18 14:30:37 +08:00
 sighforever

这个错误导致 app 崩溃了,但是并没有执行我们的代码。 不知道怎么办了,而且不止一个用户有这个问题

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:1608) at android.os.Parcel.readException(Parcel.java:1555) at android.app.job.IJobCallback$Stub$Proxy.jobFinished(IJobCallback.java:167) at android.app.job.JobService$JobHandler.handleMessage(JobService.java:147) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:150) at android.app.ActivityThread.main(ActivityThread.java:5546) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

17687 次点击
所在节点    Android
30 条回复
hkllzh
2017-01-19 14:31:40 +08:00
一样,很多设备都出现了这个错误信息。 vivo 和 oppo 占了前 4 名
sighforever
2017-01-19 15:04:02 +08:00
@hkllzh 嗯,确实 v 记和 o 记,很多,看来是不会导致应用崩溃的,先不管了
sighforever
2017-01-19 15:04:41 +08:00
@ranbin 嗯,应该是 service 导致的,目前看来不会导致应用崩溃,就先不管了
LuckHard
2017-01-25 14:44:40 +08:00
@sighforever
我也遇到了这个问题,目前推测可能是集成环信造成,不知道你们是不是也是这个情况。

还是之前的这个 issue
https://code.google.com/p/android/issues/detail?id=104302
问题的描述很明显,在某些 android 系统上有一个系统 bug ,就是如果在 JobService.onStartService 回调中调用 JobService.jobFinished 方法会出现一个随机 Crash 导致服务挂掉。
而环信代码中就是这么调用的。
具体可见 com.hyphenate.chat.EMJobService 类。

这个问题只在上线环信后出现,并且代码也与描述相符,所以推测应该是集成环信造成的。
目前正在想解决方案,有大神的话麻烦帮忙看看。
自己有三个,不知道可不可行,麻烦大家也看一下:
1 ,通过 android 的相同路径下代码覆盖的原则,重写 com.hyphenate.chat.EMJobService 类实现不调用 jobFinished 的逻辑。(不知道会不会有更大的坑)
2 ,找环信老版本的 SDK 看看,也许可以避免。(问题同上,这是一个降级操作,感觉坑更大)
3 ,去找环信沟通。(马上三十了,能解决的希望……有点渺茫……)
guiping
2017-02-04 14:26:34 +08:00
@LuckHard 我们项目中也集成环信了,也出现这个问题,比较集中的是再三星的某款机子上,代码跟踪找了下,环信通过 JobService 实现聊天服务的唤醒, 但是 JobService 在获取 getUid 的时候未获取到,就报错了。。。。
LuckHard
2017-02-04 19:14:59 +08:00
@guiping
我这里已经解决了。
在 JobService.onStartService 中 return false 的情况下应该是不需要调用 jobFinished 的。

参考:
https://code.tutsplus.com/tutorials/using-the-jobscheduler-api-on-android-lollipop--cms-23562
https://developer.android.com/reference/android/app/job/JobService.html
中文在这里:
http://wiki.jikexueyuan.com/project/android-weekly/issue-146/using-jobscheduler.html
http://mahong978.top/2016/08/19/android-job-scheduler/

环信这里应该是个错误调用,目的是想在满足条件时唤起自己的服务,这是一个快速操作, return false 是对的,但不用调用 jobFinished ,把 jobFinished 的调用去掉后即可修复。
(因为你都没有 return true 把信息加进去,那你调用 jobFinished 时系统想 getUid 时当然是空指针)
(讲道理,差点因为这个问题年都没法舒服过,改天应该和环信那边聊聊)
sighforever
2017-02-06 13:38:17 +08:00
@LuckHard

非常感谢,我们也是用了环信
sighforever
2017-02-06 13:45:28 +08:00
@LuckHard
我们一起找环信提意见,让他们赶紧升级
hkllzh
2017-02-07 09:34:31 +08:00
@LuckHard @sighforever
我们也是环信。
gdky005
2017-08-30 12:17:23 +08:00
http://www.imgeek.org/question/10825

这个里面提到:

关于这个错误,我们这边分析了下,这个属于调用 Android 5.x 之后那个 jobFinished 的一个隐患,这个应该不属于本地 catch,属于在调用这个方法过程中的远程错误输出,一般这个错误是不会被用户感知到的,不会影响到当前 app,不过后边这边会把这个隐患给去掉,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/335392

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX