Android作业调度程序在重新启动时不会保留

时间:2017-02-07 07:30:48

标签: android service

我已经在我的项目中实现了Job scheduler,如果应用程序在后台或应用程序被杀死,它可以正常工作。但是如果重启设备则无法正常工作。我已经包括了

     JobInfo.Builder mBuilder = new JobInfo.Builder(TASK_ID, mComponentName);
     mBuilder.setPersisted(true);

在我的构建器和

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

在应用程序清单文件中。这就是我将我的服务添加到清单

的方式
     <service
        android:name="com.xxx.xxxx.service.MyJobService"
        android:permission="android.permission.BIND_JOB_SERVICE" />

还有什么要包括在内吗?

提前致谢

3 个答案:

答案 0 :(得分:5)

注册BroadCastReciever以检测BOOT_COMPLETED

<receiver android:name="com.example.startuptest.StartUpBootReceiver">
<intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>

在你的BroadcastReceiver中:

public class StartUpBootReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
        Log.d("startuptest", "StartUpBootReceiver BOOT_COMPLETED");
        ...
    }
  }
}

用户在您的应用中运行一次任何活动后,您将在以后的所有启动后收到BOOT_COMPLETED广播。

答案 1 :(得分:0)

您需要调用setPersisted(boolean isPersisted)方法。

您可以在文档https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setPersisted(boolean)

中找到它

答案 2 :(得分:0)

我知道这是一个老问题,您可能已经有了解决方案,但问题可能是JobService缓存了具有权限的应用程序的UUID。您将需要重新安装您的应用程序,它会没事的。

来源: https://android.googlesource.com/platform/frameworks/base/+/5d34605/services/core/java/com/android/server/job/JobSchedulerService.java