Android O 后台限制

Android O background limitations

如果应用程序在收到 Intent 后处于空闲状态,它是否可以调用 startService(),文档中并不清楚。文档讨论了 sms/MMS 广播意图,如果应用程序通过广播接收器接收到 any 意图,则不清楚该应用程序是否被列入白名单。直到现在我还没有找到一种方法来测试将应用程序置于空闲状态。有什么建议吗?

因为 Android O 您只能在以下情况下调用 startService():

  1. 您的应用程序在前台。
  2. 您使用 JobScheduler/JobService 结束调用。

对于#2,你基本上替换了:

startService(startMyServiceIntent);

有了这个:

ComponentName serviceName          = new ComponentName(context, MyJobService.class);
JobScheduler  jobScheduler          = (JobScheduler)context.getSystemService(Context.JOB_SCHDULER_SERVICE);
JobInfo       startMySerivceJobInfo = new JobInfo.Builder(MyJobService.JOB_ID, serviceName).setMinimumLatency(100).build();
int           result                = jobScheduler.schedule(startMyServiceJobInfo);

那么你只需要 class 扩展 JobService 来实际启动服务:

public class MyJobService extends JobService {
  public static final int JOB_ID = 0;  // app unique job id. 

  @Override
  public boolean onJobStart(JobParameters params) {
    ...
    startService(startMyServiceIntent);
    ...
    return false;
  }
}

这将在前台或后台启动您的服务。后台服务可以持续多长时间仍然存在后台限制 运行。看到这个:

我自己回复:没有,只是一些系统意图将应用程序放入白名单