Java Android Oreo背景限制

Java Android Oreo背景限制,java,android,android-service,mqtt,Java,Android,Android Service,Mqtt,我正在使用Eclipse的android库。此库在内部启动一个获取数据的服务。现在,当我的应用程序在后台并发出推送通知时,Paho的服务在oreo之前的设备上运行良好。但在Oreo设备上,在应用程序进入后台状态后,这项工作会持续几分钟。在这段时间之后,虽然我正在发送高优先级GCM消息,但服务不会启动,并在logcat后台启动不允许中发出警告。和官方文档一样,对于高优先级GCM消息,应用程序会在几分钟内被列入白名单。在这种情况下,它应该适用于高优先级GCM消息 据我所知,只要高优先级GCM到达,应

我正在使用Eclipse的android库。此库在内部启动一个获取数据的服务。现在,当我的应用程序在后台并发出推送通知时,Paho的服务在oreo之前的设备上运行良好。但在Oreo设备上,在应用程序进入后台状态后,这项工作会持续几分钟。在这段时间之后,虽然我正在发送高优先级GCM消息,但服务不会启动,并在logcat
后台启动不允许中发出警告。和官方文档一样,对于高优先级GCM消息,应用程序会在几分钟内被列入白名单。在这种情况下,它应该适用于高优先级GCM消息


据我所知,只要高优先级GCM到达,应用程序就会被列入白名单。是否正确?

为Android O做好准备:

1) 而不是意向服务;您的服务需要扩展JobIntentService

2) 而不是简单的内容;你需要用手工

3) 而不是startService;您需要使用排队工作

看看这个。

在处理广播时,您需要确保意图是明确的

private static void sendImplicitBroadcast(Context ctxt, Intent i) {
    PackageManager pm=ctxt.getPackageManager();
    List<ResolveInfo> matches=pm.queryBroadcastReceivers(i, 0);

    for (ResolveInfo resolveInfo : matches) {
        Intent explicit=new Intent(i);
        ComponentName cn=
                new ComponentName(resolveInfo.activityInfo.applicationInfo.packageName,
                        resolveInfo.activityInfo.name);

        explicit.setComponent(cn);
        ctxt.sendBroadcast(explicit);
    }
}
private static void sendImplicitBroadcast(上下文ctxt,意图i){
PackageManager pm=ctxt.getPackageManager();
列表匹配=pm.queryBroadcastReceivers(i,0);
for(ResolveInfo ResolveInfo:matches){
明确意图=新意图(i);
组件名称cn=
新组件名称(resolveInfo.activityInfo.applicationInfo.packageName,
resolveInfo.activityInfo.name);
explicit.setComponent(cn);
发送广播(显式);
}
}

这是来自

请将代码放在此处