JobScheduler onStartJob задерживается после того, как приложение будет убито - PullRequest
0 голосов
/ 27 сентября 2018

Я не понимаю, почему служба 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:

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"/>

Может кто-нибудь помочь мне решить эту проблему?Если возможно, предоставьте подробное объяснение этой задержки.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018
 @Override
    public boolean onStartJob(JobParameters params) {
        Log.i(TAG, "onStartJob" + mConnectivityReceiver);
        return true;
    }

Вышеупомянутый вызов метода задерживается из-за недоступности системных ресурсов.Нет необходимости, чтобы JobSceduler запускал задание в указанный срок, который я упоминал в приведенном выше коде.

например: setOverrideDeadline (2000)

Некоторые из методов JobInfo, такие как setRequiresCharging () и setRequiresBatteryNotLow () могут уменьшитьсязадержка.

Примечание. Эта задержка зависит от устройства Nougat и Oreo.Так что надо посмотреть на их задержку.

0 голосов
/ 03 октября 2018

Попробуйте добавить включенный атрибут в NetworkSchedulerService в манифесте:

android:enabled="true"
...