java - 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);
例如,我希望它在一分钟后唤醒。作为最后的手段,我可以暂停它,但我更希望能够创建警报。
如果您知道任何其他方式,也欢迎您。非常感谢。