根据docs:
前台流程是用户所需的流程 正在做。各种应用程序组件可能导致其 包含过程以不同方式被视为前台。 A 如果存在以下任何情况,则认为该过程处于前台 条件成立:
它正在与用户进行交互的屏幕顶部运行一个Activity(已调用其onResume()方法)。
>它具有当前正在运行的BroadcastReceiver(其 BroadcastReceiver.onReceive()方法正在执行)。
它具有一个服务,该服务当前正在其回调之一(Service.onCreate(),Service.onStart()或 Service.onDestroy())。
我使用API 27,当我运行启动服务时,该过程处于前台,因此该服务应启动。但是相反,我得到了错误,我限制了Android Oreo 。文档不准确吗?
@Override
public void onReceive(Context context, Intent intent) {
// assumes WordService is a registered service
context.startService(new Intent(context, HelloService.class));
}
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.testapp, PID: 26026
java.lang.RuntimeException: Unable to start receiver com.example.paourissi.testapp.MyReceiver: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.example.testapp/.HelloService }: app is in background uid UidRecord{bee03a7 u0a82 RCVR bg:+1m19s133ms idle change:uncached procs:1 seq(0,0,0)}
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3194)
at android.app.ActivityThread.-wrap17(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1672)
at android.os.Handler.dispatchMessage(Handler.java:106)