JobIntentService повторяется во времени - PullRequest
0 голосов
/ 15 апреля 2020

Я хочу использовать JobIntentService для отправки запросов на сервер каждый раз. Проблема в том, что в версиях до 26 android он отлично работает с AlarmManager, но в самых последних версиях - нет.

public class ExampleJobIntentService extends JobIntentService {
private static final String TAG = "ExampleJobIntentService";

static void enqueueWork(Context context, Intent work) {
    enqueueWork(context, ExampleJobIntentService.class, 123, work);
}

@Override
public void onCreate() {
    super.onCreate();
    Log.d(TAG, "onCreate");
}

@Override
protected void onHandleWork(@NonNull Intent intent) {
    Log.d(TAG, "onHandleWork");

    String input = intent.getStringExtra("inputExtra");

    for (int i = 0; i < 10; i++) {
        Log.d(TAG, input + " - " + i);

        if (isStopped()) return;

        SystemClock.sleep(1000);
    }

}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy");
    Intent serIntent = new Intent(this, ExampleJobIntentService.class);
    serIntent.putExtra("inputExtra", Singleton.getInstance().getWord());

    PendingIntent alarmIntent = PendingIntent.getService(getApplicationContext(), 1, serIntent, 0);
    AlarmManager alarmSer = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmSer.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, alarmIntent);
}

@Override
public boolean onStopCurrentWork() {
    Log.d(TAG, "onStopCurrentWork");
    return super.onStopCurrentWork();
}

}

Это в android VM из 24 идет очень хорошо, но в 29 он входит в «onCreate», но он не запускает «onHandleWork», я думаю, потому что он не запускает «enqueueWork».

Создание нового намерения с помощью ExampleJobIntentService работает, но оно делает это очень быстро:

Intent serIntent = new Intent(this, ExampleJobIntentService.class);
serIntent.putExtra("inputExtra", Singleton.getInstance().getWord());

ExampleJobIntentService.enqueueWork(this, serIntent);

Я хочу, чтобы он проснулся, например, через минуту. Также, в крайнем случае, я мог бы приостановить это, но я бы предпочел иметь возможность создать будильник.

Если вы знаете другой путь, добро пожаловать. Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...