非法参数异常:没有这样的服务ComponentInfo{JobIntentService}。

10

关于此问题的SO答案没有帮助我,我已经声明了所有权限并在代码中接受了答案。

AppInfoJobService(CustomJobIntentService) 在 Android 8+ 设备上会抛出以下错误,这种情况很少发生,无法复现。我们在BaseActivityonCreate 中使用enqueueWork。我们主要有一个活动和碎片。

Fatal Exception: java.lang.IllegalArgumentException: No such service ComponentInfo{<app package>AppInfoJobService}
   at android.os.Parcel.readException(Parcel.java:2009)
   at android.os.Parcel.readException(Parcel.java:1951)
   at android.app.job.IJobScheduler$Stub$Proxy.enqueue(IJobScheduler.java:211)
   at android.app.JobSchedulerImpl.enqueue(JobSchedulerImpl.java:53)
   at android.support.v4.app.JobIntentService$JobWorkEnqueuer.enqueueWork(JobIntentService.java:342)
   at android.support.v4.app.JobIntentService.enqueueWork(JobIntentService.java:522)
   at android.support.v4.app.JobIntentService.enqueueWork(JobIntentService.java:500)
   at <application package>AppInfoJobService.startWork(AppInfoJobService.java:254)
   at <application package>MyApplication.onStartStopChanged(MusicApplication.java:694)
   at <application package>AppStateMonitor.notifyStartStop(AppStateMonitor.java:150)
   at <application package>AppStateMonitor.access$000(AppStateMonitor.java:14)
   at <application package>AppStateMonitor$CreateDestroyRunnable.run(AppStateMonitor.java:71)
   at android.os.Handler.handleCallback(Handler.java:790)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:164)
   at android.app.ActivityThread.main(ActivityThread.java:6545)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:857) 

3
我在运行Oreo的LAVA设备上遇到了相同的问题...你找到什么解决方法了吗? - Bassel Mourjan
你认为问题是由于我们试图在片段的onCreate中启动jobIntentService引起的吗? - Bassel Mourjan
不,这不是问题.. 不应该是的.. 我只是在尝试调试和研究为什么会发生这种情况.. 在我的情况下,这只发生在运行 Android 8 的 LAVA 设备上.. 无论如何,我已经把解决它作为优先事项,所以希望我很快能找到问题的底部.. 话虽如此,在后延处理程序中调用了您的作业之后,您是否仍然遇到此错误? - Bassel Mourjan
是的,错误仍然存在。我认为JobIntentService在OS 8+中存在某些内部问题。我们在Crashlytics报告中收到了许多与版本8、8.1相关的JobIntentService崩溃。您可以参考此链接https://issuetracker.google.com/issues/63622293。 - shalini
@Bassel Mourjan 我从一台运行 Android 8.1.0 的 Lava Z61 收到了相同的崩溃报告。 - Prasad Pawar
显示剩余9条评论
4个回答

8

注意:由于我没有足够的声望来发表评论并想要帮助作者,因此我将开始一个单独的线程。

这实际上是一个LAVA设备在Android Oreo上存在的问题,并且在其他设备上运行得非常好。

我也在LAVA Z60s和LAVA Z61上观察到了这一点。

从crashlytics中添加相关信息 enter image description here


1
没错,由于我无法访问LAVA设备,因此无法重现这个问题,希望有人能够提供答案/解决方法。 - Bassel Mourjan
1
@SaranSankaran 很抱歉回复晚了,但我们无法找到任何解决方案,最终在我们这边压制了异常。 - Vrajesh Hirani
我现在正在尝试联系LAVA的软件开发团队,但迄今为止没有任何进展。 - Bassel Mourjan
@BasselMourjan 用户重新安装后行为是否仍然相同? - Vrajesh Hirani
根据LAVA用户的说法,@VrajeshHirani,在安装后第一次运行正常,但在第二次启动时失败。 - Bassel Mourjan
显示剩余6条评论

3

我也在考虑这么做。WM测试过这个解决方案吗?希望它不会增加其他的错误计数。 - shalini
说实话,我等到它成为一个稳定版本,并将其应用于我的活跃应用程序,拥有10k+活跃用户...到目前为止,只有1个用户受到了3次崩溃的影响。 - Bassel Mourjan

-1
我的情况是我没有在AndroidManifest.xml中创建服务,所以它找不到那个服务。为了解决这个问题,请将以下内容添加到其中:
    ...
    /activity>
    <service
        android:name=".YOUR_FOLDER.YOUR_SERVICE_FILENAME"
        android:permission="android.permission.BIND_JOB_SERVICE"
        android:exported="false" />
    <receiver
        android:name=".YOUR_FOLDER.YOUR_RECEIVER_FILENAME"></receiver>

</application> 

2
因为这是一个不同的问题,与我们正在讨论的问题不同,所以被投下了反对票。 - Bassel Mourjan

-2

当应用程序处于后台或被杀死并尝试重新启动服务时,您不能使用startService方法启动服务或intentService。

据我所理解的情况是(正如您所说的很少发生),应用程序在不在内存中的情况下尝试重新启动应用程序。


1
因为这个回答没有解决问题的核心——即为什么在这种情况下,JobScheduler.schedule会抛出IllegalArgumentException,所以被踩了。 - Michael Krause

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接