Android O 后台限制
Android O background limitations
如果应用程序在收到 Intent 后处于空闲状态,它是否可以调用 startService()
,文档中并不清楚。文档讨论了 sms/MMS 广播意图,如果应用程序通过广播接收器接收到 any 意图,则不清楚该应用程序是否被列入白名单。直到现在我还没有找到一种方法来测试将应用程序置于空闲状态。有什么建议吗?
因为 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);
那么你只需要 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;
}
}
这将在前台或后台启动您的服务。后台服务可以持续多长时间仍然存在后台限制 运行。看到这个:
我自己回复:没有,只是一些系统意图将应用程序放入白名单
如果应用程序在收到 Intent 后处于空闲状态,它是否可以调用 startService()
,文档中并不清楚。文档讨论了 sms/MMS 广播意图,如果应用程序通过广播接收器接收到 any 意图,则不清楚该应用程序是否被列入白名单。直到现在我还没有找到一种方法来测试将应用程序置于空闲状态。有什么建议吗?
因为 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);
那么你只需要 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;
}
}
这将在前台或后台启动您的服务。后台服务可以持续多长时间仍然存在后台限制 运行。看到这个:
我自己回复:没有,只是一些系统意图将应用程序放入白名单