从文档中并不清楚应用程序在接收到意图后是否可以在空闲状态下调用startService()
。文档谈到了短信/彩信广播意图,但如果应用程序通过广播接收器接收到任何意图,则不清楚该应用程序是否被放置在白名单中。到目前为止,我还没有找到一种方法来测试将应用程序置于空闲状态。有什么建议吗?
从文档中并不清楚应用程序在接收到意图后是否可以在空闲状态下调用startService()
。文档谈到了短信/彩信广播意图,但如果应用程序通过广播接收器接收到任何意图,则不清楚该应用程序是否被放置在白名单中。到目前为止,我还没有找到一种方法来测试将应用程序置于空闲状态。有什么建议吗?
自 Android O 开始,只有在以下情况下才能调用 startService():
对于第二种情况,您基本上需要替换:
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
我回复自己:不,只有一些系统意图会将应用程序放入白名单中。