首页 > 解决方案 > JobIntentService 及时重复

问题描述

我想使用 JobIntentService 每隔 x 次向服务器发送请求。问题是,在 android 26 之前的版本中,它可以与 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();
}

}

这在 24 的 android VM 中进展顺利,但在 29 中它进入“onCreate”但它没有运行“onHandleWork”,我猜是因为它没有运行“enqueueWork”。

使用 ExampleJobIntentService 创建一个新意图是可行的,但它做得非常快:

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

ExampleJobIntentService.enqueueWork(this, serIntent);

例如,我希望它在一分钟后唤醒。作为最后的手段,我可​​以暂停它,但我更希望能够创建警报。

如果您知道任何其他方式,也欢迎您。非常感谢。

标签: javaandroid

解决方案


推荐阅读