当我在Application#onCreate()方法中安排JobScheduler时,有时会遇到以下错误:
java.lang.IllegalArgumentException: No such service ComponentInfo{com.brain.MyJobService}
at android.os.Parcel.readException(Parcel.java:1688)
at android.os.Parcel.readException(Parcel.java:1637)
at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:158)
at android.app.JobSchedulerImpl.schedule(JobSchedulerImpl.java:42)
at com.brain.MyScanJobService.configSchedule(MyJobService.java:341)
at com.brain.MyJobService.configSchedule(MyJobService.java:317)
at com.miui.optimizecenter.ApplicationDelegate$1.run(ApplicationDelegate.java:85)
我的守则简单如下:
AndroidManifest.xml中
<service
android:name="com.brain.MyJobService"
android:permission="android.permission.BIND_JOB_SERVICE">
</service>
MyJobService
public class MyJobService extends JobService {
// ...
public static void scheduleJob(Context context){
// ...
JobInfo scanJob = new JobInfo.Builder(MY_JOB_ID, new ComponentName(context, MyJobService.class))
.setPeriodic(1000*100)
.setPersisted(true)
.setRequiresDeviceIdle(true)
.build();
// tag2
jobScheduler.schedule(scanJob)
}
// ...
}
ApplicationDelegate#的onCreate()
public void onCreate() {
super.onCreate();
new Thread(new Runnable(){
MyJobScheduler.scheduleJob();
}).start()
}
除了Application#onCreate()方法之外,使用相同的配置方法可以很好地工作。
谢谢你的帮助!!!
尝试在清单声明中添加android:exported="true"
:
<service
android:name="com.brain.MyJobService"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE">
</service>