gpt4 book ai didi

android - 从 IntentService 迁移到 Android O 的 JobIntentService

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:58 24 4
gpt4 key购买 nike

以前我使用 IntentService 定期向服务器发送数据。但是,由于 Android O 限制后台任务和进程,我正在转向 JobIntentService。

用于安排闹钟的我的 Activity 代码

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);
}
}

但是,当应用程序处于后台并且我使用 context.startForegroundService(myIntent); 启动我的服务时,这不适用于 Android O,它会抛出异常,如 Context.startForegroundService( ) 然后没有调用 Service.startForeground()

最佳答案

JobIntentService 主要用于将从 UI 调用的服务,例如执行大型下载的服务,由用户单击“下载!”启动按钮。

对于周期性后台工作,使用 JobSchedulerJobService。如果您需要支持早于 Android 5.0 的版本,请使用合适的包装器库(例如 Evernote 的 android-job),该库将在较新的设备上使用 JobScheduler 并且 旧设备上的 AlarmManager

或者,坚持使用 AlarmManager,但使用前台服务。

关于android - 从 IntentService 迁移到 Android O 的 JobIntentService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48805174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com