Android O背景限制

时间:2017-03-23 06:22:51

标签: android android-8.0-oreo

从文档中可以看出,如果应用程序在收到意图后处于空闲状态,则可以调用startService()。文档讨论短信/彩信广播意图,如果应用程序通过广播接收器接收任何意图,则不清楚应用程序是否置于白名单中。到目前为止,我没有找到一种方法来测试它将应用程序置于空闲状态。有什么提示吗?

2 个答案:

答案 0 :(得分:0)

自Android O起,您只能在以下情况下调用startService():

  1. 您的应用程序位于前台。
  2. 您使用JobScheduler / JobService来打包电话。
  3. 对于#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

答案 1 :(得分:-1)

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