在应用程序启动时,应用程序启动应该执行一些网络任务的服务。
在目标API级别26后,我的应用程序无法在Android 8.0后台启动服务。
导致原因:java.lang.IllegalStateException:不允许启动
服务意图{
cmp = my.app.tt / com.my.service
}: app是在后台uid UidRecord{90372b1 u0a136 CEM空闲procs:1
seq (0, 0, 0)}
我的理解是:
后台执行限制
startService()方法现在抛出一个IllegalStateException
针对Android 8.0的应用程序尝试使用这种方法
不允许创建后台服务。
“在不被允许的情况下”——这实际上是什么意思?以及如何修复它。我不想把我的服务设置为前台
最好的方法是使用JobIntentService,它为Oreo使用新的JobScheduler,如果不可用则使用旧的服务。
在舱单上申报:
<service android:name=".YourService"
android:permission="android.permission.BIND_JOB_SERVICE"/>
在你的服务中,你必须用onHandleWork替换onHandleIntent:
public class YourService extends JobIntentService {
public static final int JOB_ID = 1;
public static void enqueueWork(Context context, Intent work) {
enqueueWork(context, YourService.class, JOB_ID, work);
}
@Override
protected void onHandleWork(@NonNull Intent intent) {
// your code
}
}
然后你开始你的服务:
YourService.enqueueWork(context, new Intent());
最好的方法是使用JobIntentService,它为Oreo使用新的JobScheduler,如果不可用则使用旧的服务。
在舱单上申报:
<service android:name=".YourService"
android:permission="android.permission.BIND_JOB_SERVICE"/>
在你的服务中,你必须用onHandleWork替换onHandleIntent:
public class YourService extends JobIntentService {
public static final int JOB_ID = 1;
public static void enqueueWork(Context context, Intent work) {
enqueueWork(context, YourService.class, JOB_ID, work);
}
@Override
protected void onHandleWork(@NonNull Intent intent) {
// your code
}
}
然后你开始你的服务:
YourService.enqueueWork(context, new Intent());