文档中不清楚应用程序是否可以在收到意图后调用startService()是否处于空闲状态。文档中提到了sms/mms的广播意图,目前还不清楚该应用是否被列入了白名单,是否通过广播接收器接收到了任何意图。直到现在,我还没有找到一种方法来测试它,让应用程序处于空闲状态。有什么小窍门吗?

最佳答案

由于Android O,您只能在以下情况下调用startService():
你的应用程序在前台。
使用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);

那么您只需要一个扩展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;
  }
}

这将在前台或后台启动您的服务。后台服务的运行时间仍有背景限制。看这个:https://stackoverflow.com/a/44241192/786462

07-24 20:04