Android8.0:java.lang.IllegalStateException:

Android8.0:java.lang.IllegalStateException:

在应用程序启动时,应用程序启动应该执行某些网络任务的服务。在针对API级别26之后,我的应用程序无法在后台的Android8.0上启动服务。

由以下原因引起:java.lang.IllegalStateException:不允许启动服务意图{CMP=my.app.tt/com.my.service}:APP处于后台uid UidRecord{90372b1 u0a136 CEM空闲进程:1 seq(0,0,0)}

据我所知,它涉及:背景执行限制

如果针对Android8.0的应用程序试图在不允许创建后台服务的情况下使用该方法,startService()方法将引发IllegalStateException。

"在不允许的情况下-这到底是什么意思?以及如何解决它。我不想把我的服务设置为“前景”



茅侃侃
浏览 289回答 3
3回答

神不在的星期二

我找到解决办法了。对于8.0前的设备,您只需使用startService(),但对于后置7.0设备,您必须使用startForgroundService()..下面是启动服务的代码示例。if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {         context.startForegroundService(new Intent(context, ServedService.class));     } else {         context.startService(new Intent(context, ServedService.class));     }在服务类中,请添加以下代码以进行通知:@Overridepublic void onCreate() {     super.onCreate();     startForeground(1,new Notification());}其中O是Android版本26。

慕的地8271018

最好的方法是JobIntentService它对OREO使用新的JobScheduler,如果不可用,则使用旧的服务。在您的舱单中声明:<service&nbsp;android:name=".YourService" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:permission="android.permission.BIND_JOB_SERVICE"/>在您的服务中,您必须将onHandleIntent替换为onHandleWork:public&nbsp;class&nbsp;YourService&nbsp;extends&nbsp;JobIntentService&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;final&nbsp;int&nbsp;JOB_ID&nbsp;=&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;enqueueWork(Context&nbsp;context,&nbsp;Intent&nbsp;work)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enqueueWork(context,&nbsp;YourService.class,&nbsp;JOB_ID,&nbsp;work); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;onHandleWork(@NonNull&nbsp;Intent&nbsp;intent)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;your&nbsp;code &nbsp;&nbsp;&nbsp;&nbsp;}}然后,您可以从以下方面开始您的服务:YourService.enqueueWork(context,&nbsp;new&nbsp;Intent());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android