V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sighforever
V2EX  ›  Android

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

  •  
  •   sighforever · 2017-01-18 14:30:37 +08:00 · 17766 次点击
    这是一个创建于 2901 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个错误导致 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)

    30 条回复    2017-08-30 12:17:23 +08:00
    vjnjc
        1
    vjnjc  
       2017-01-18 14:59:32 +08:00
    有报错设备信息么?
    sighforever
        2
    sighforever  
    OP
       2017-01-18 15:06:39 +08:00
    包括什么样的设备信息呢?
    我这里记录到的机型有, vivo X7Plus(5.1.1), HUAWEI RIO-AL00(6.0.1), HUAWEI P7-L07(5.1.1),HUAWEI RIO-CL00(6.0.1)
    mokechen
        3
    mokechen  
       2017-01-18 15:27:09 +08:00
    明显的空指针错误 这还看不到么
    mokechen
        4
    mokechen  
       2017-01-18 15:28:30 +08:00
    发生了空对象引用 在 com.android.server.job.controllers.JobStatus.getUid()这个地方
    yuyuyu
        5
    yuyuyu  
       2017-01-18 15:31:07 +08:00
    我想知道要怎么收集这种崩溃错误信息?
    liu37130
        6
    liu37130  
       2017-01-18 15:38:32 +08:00
    这里有个和你的很像的 issue ,会不会有什么启发。。。
    https://code.google.com/p/android/issues/detail?id=104302
    sighforever
        7
    sighforever  
    OP
       2017-01-18 15:41:12 +08:00
    @mokechen 看到了是空指针的

    但是 com.android.server.job.controllers.JobStatus. 这个对象是 android 自己产生的,你看他的命名空间和整个的调用堆栈,根本没有我们写的代码啊。

    现在的问题就是找不到到底是我们的代码什么地方会引起系统的这个错误。而且这个问题在我们测试机器上都复现不出来,很是郁闷
    sighforever
        8
    sighforever  
    OP
       2017-01-18 15:45:00 +08:00
    @liu37130 感谢
    我也搜到了这个帖子,但是没有回答,这里面每个人都说的是 "我也碰到这个问题了"

    我有点怀疑是由于某个第三方库导致的
    lawfun
        9
    lawfun  
       2017-01-18 15:51:23 +08:00
    @yuyuyu Fabric , Bugly 都可以
    wanttofly
        10
    wanttofly  
       2017-01-18 16:04:16 +08:00
    https://github.com/evernote/android-job/issues/92 看到这个 issue 里有提到华为 6.0 的机型,也许你可以试着联系下那个人 https://github.com/tobiasschuerg ,问下他解决了没?
    wipen
        11
    wipen  
       2017-01-18 16:11:32 +08:00
    感觉是系统的 bug ,一般以
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
    wipen
        12
    wipen  
       2017-01-18 16:13:35 +08:00
    感觉是系统的 bug ,一般以
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
    这个开头的最后结论是系统问题。

    如果是第三方库的原因,应该能够在错误路径中打出第三方库的包和调用。

    你还可以试试在项目中搜索 JobStatus 和 JobService 的使用情况。
    catror
        13
    catror  
       2017-01-18 16:23:48 +08:00
    看一下调用 jobFinished 的地方,感觉是被调用了两次。
    bkmi
        14
    bkmi  
       2017-01-18 17:18:39 +08:00
    @wipen Android 所有进程都是从这个方法开始的 ,所有的 crash 最终都会抛到这个方法上,不要乱甩锅
    zhibin
        15
    zhibin  
       2017-01-18 18:11:29 +08:00   ❤️ 1
    恭喜你 , 你可能发现了一个 Android 的 Bug 哦, 猜测是下面这个地方出的错误。这个发生概率多大?

    http://androidxref.com/7.1.1_r6/xref/frameworks/base/services/core/java/com/android/server/job/JobServiceContext.java#352


    这有一个类似问题:
    https://github.com/evernote/android-job/issues/92
    id2wander
        16
    id2wander  
       2017-01-18 18:32:50 +08:00
    AlisaDestiny
        17
    AlisaDestiny  
       2017-01-18 21:19:14 +08:00 via iPhone
    我今天用 Java 调用 mongodb 也有类似情况。我没有调用连接数据库代码,却给我报了个链接错误。死活找不到根源。
    sighforever
        18
    sighforever  
    OP
       2017-01-19 10:18:43 +08:00
    @zhibin 感觉也不像是 android 的 bug ,好像上一个版本都没有这个问题呢
    唉!就是不知道这个错误到底会不会导致应用崩溃,现在还没有用户抱怨崩溃的问题,但也不好说啊
    zhibin
        19
    zhibin  
       2017-01-19 11:10:35 +08:00
    @sighforever 应用是否使用了 JobService / JobScheduler 相关的东西?
    从 log 来看应该会导致进程终止。 在我看来是并发导致的问题。
    ranbin
        20
    ranbin  
       2017-01-19 11:50:06 +08:00
    Android 5.0(API 21)添加了可以在特定条件下执行后台任务的 JobScheduler 服务,该服务在系统启动过程由 SystemServer 启动,同 ActivityManager 等服务类似该服务在使用的时候貌似也需要通过 Binder 进行进程间通信,而从报错的堆栈信息上看应该是在通信过程中被调用侧也就是 service 处抛出了异常反馈到了调用侧 client 端,感觉如果你的应用中没有使用到该服务,貌似不会出现应用崩溃的问题吧~
    hkllzh
        21
    hkllzh  
       2017-01-19 14:31:40 +08:00
    一样,很多设备都出现了这个错误信息。 vivo 和 oppo 占了前 4 名
    sighforever
        22
    sighforever  
    OP
       2017-01-19 15:04:02 +08:00
    @hkllzh 嗯,确实 v 记和 o 记,很多,看来是不会导致应用崩溃的,先不管了
    sighforever
        23
    sighforever  
    OP
       2017-01-19 15:04:41 +08:00
    @ranbin 嗯,应该是 service 导致的,目前看来不会导致应用崩溃,就先不管了
    LuckHard
        24
    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
        25
    guiping  
       2017-02-04 14:26:34 +08:00
    @LuckHard 我们项目中也集成环信了,也出现这个问题,比较集中的是再三星的某款机子上,代码跟踪找了下,环信通过 JobService 实现聊天服务的唤醒, 但是 JobService 在获取 getUid 的时候未获取到,就报错了。。。。
    LuckHard
        26
    LuckHard  
       2017-02-04 19:14:59 +08:00   ❤️ 1
    @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
        27
    sighforever  
    OP
       2017-02-06 13:38:17 +08:00
    @LuckHard

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

    这个里面提到:

    关于这个错误,我们这边分析了下,这个属于调用 Android 5.x 之后那个 jobFinished 的一个隐患,这个应该不属于本地 catch,属于在调用这个方法过程中的远程错误输出,一般这个错误是不会被用户感知到的,不会影响到当前 app,不过后边这边会把这个隐患给去掉,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2825 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 07:10 · PVG 15:10 · LAX 23:10 · JFK 02:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.