【问题标题】:JobScheduler onStartJob gets delayed once application gets killed一旦应用程序被杀死,JobScheduler onStartJob 就会延迟
【发布时间】:2018-09-27 03:56:19
【问题描述】:

我不明白为什么服务 onStartJob 没有在 setOverrideDeadline(2000) 中提到的给定时间调用。

我正在安排这样的工作:

private void scheduleJob() {
    JobInfo myJob = new JobInfo.Builder(0, new ComponentName(this, NetworkSchedulerService.class))
            .setRequiresCharging(true)
            .setMinimumLatency(1000)
            .setOverrideDeadline(2000)
            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
            .setPersisted(true)
            .build();

    JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
    jobScheduler.schedule(myJob);
}

JobService sn-p:

public class NetworkSchedulerService extends JobService implements
        ConnectivityReceiver.ConnectivityReceiverListener {

    private static final String TAG = NetworkSchedulerService.class.getSimpleName();

    private ConnectivityReceiver mConnectivityReceiver;

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "Service created");
        mConnectivityReceiver = new ConnectivityReceiver(this);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "Service destroyed");
    }

    /**
     * When the app's MainActivity is created, it starts this service. This is so that the
     * activity and this service can communicate back and forth. See "setUiCallback()"
     */
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "onStartCommand");
        return START_NOT_STICKY;
    }


    @Override
    public boolean onStartJob(JobParameters params) {
        Log.i(TAG, "onStartJob" + mConnectivityReceiver);
        registerReceiver(mConnectivityReceiver, new IntentFilter(Constants.CONNECTIVITY_ACTION));
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        Log.i(TAG, "onStopJob");
        unregisterReceiver(mConnectivityReceiver);
        return true;
    }
}

清单:

 <service
            android:name=".NetworkSchedulerService"
            android:exported="true"
            android:permission="android.permission.BIND_JOB_SERVICE"/>

有人可以帮我解决这个问题吗?如果可能,请提供有关此延迟的详细说明。

【问题讨论】:

  • 您能添加您的清单吗?您是否已将工作服务声明添加到您的清单中?
  • @AnisBENNSIR:请查看清单。
  • 从您的实施中,我可以看到任何问题。您的工作是根本没有运行还是在 1 秒后运行,或者您希望它在 2 秒后运行?您能否详细说明预期的行为以及您所面临的具体情况...从您的实施中,您的接收器将在注册后立即取消注册...
  • @AnisBENNSIR:我期待在 2000 毫秒后拨打电话,但在将近 1 分钟后收到电话。连我的设备都充电了。不明白为什么通话会延迟。

标签: android android-jobscheduler jobservice


【解决方案1】:
 @Override
    public boolean onStartJob(JobParameters params) {
        Log.i(TAG, "onStartJob" + mConnectivityReceiver);
        return true;
    }

由于系统资源不可用,上述方法调用延迟。 JobSceduler 没有必要在我在上面代码中提到的给定期限内开始工作。

例如:setOverrideDeadline(2000)

setRequiresCharging()setRequiresBatteryNotLow() 等 JobInfo 方法可以减少延迟。

注意:此延迟在 Nougat 和 Oreo 设备中有所不同。所以有必要看看他们的延迟。

【讨论】:

    【解决方案2】:

    尝试在 Manifest 中为 NetworkSchedulerService 添加启用属性:

    android:enabled="true"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      相关资源
      最近更新 更多