之前我使用IntentService周期性地向服务器发送数据。然而,由于Android O限制了后台任务和进程,我现在正在转向使用JobIntentService。
这是我的活动代码以安排一个闹钟:
Intent intent = new Intent(BaseActivity.this, EventBroadcastReceiver.class);
// Create a PendingIntent to be triggered when the alarm goes off
final PendingIntent pIntent = PendingIntent.getBroadcast(this, EventBroadcastReceiver.REQUEST_CODE,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Setup periodic alarm every half hour
long firstMillis = System.currentTimeMillis(); // alarm is set right away
AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis,
AlarmManager.INTERVAL_HALF_HOUR, pIntent);
我的服务如下:
public class EventAnalyticsService extends JobIntentService {
@Override
protected void onHandleWork(@NonNull Intent intent) {
// Perform your task
}
@Override
public void onCreate() {
super.onCreate();
}
}
这段代码的接收者是:
public class EventBroadcastReceiver extends BroadcastReceiver {
public static final int REQUEST_CODE = 12345;
@Override
public void onReceive(Context context, Intent intent) {
Intent myIntent = new Intent(context, EventAnalyticsService.class);
context.startService(myIntent);
}
}
然而,当应用程序在后台运行时,这对于Android O来说是不起作用的,如果我使用context.startForegroundService(myIntent);
启动我的服务,它会抛出异常,如下所示:Context.startForegroundService()未调用Service.startForeground()