我也有同样的行为。
为什么会发生此问题?
由于Android 8
具有新的后台执行限制,因此您不应启动服务后台。
我如何解决
将您的迁移
GCMIntetService到,
JobIntentService而不是
IntentService。
请按照以下步骤操作:1)将BIND_JOB_SERVICE权限添加到您的服务中:
<service android:name=".service.GCMIntentService" android:exported="false" android:permission="android.permission.BIND_JOB_SERVICE"/>
2)在您的内部
GCMIntentService(而不是扩展)
IntentService,使用
android.support.v4.app.JobIntentService并覆盖onHandleWork,然后删除其中
override的
onHandleIntent。
public class GCMIntentService extends JobIntentService { // Service unique ID static final int SERVICE_JOB_ID = 50; // Enqueuing work in to this service. public static void enqueueWork(Context context, Intent work) { enqueueWork(context, GCMIntentService.class, SERVICE_JOB_ID, work); } @Override protected void onHandleWork(@NonNull Intent intent) { onHandleIntent(intent); } private void onHandleIntent(Intent intent) { //Handling of notification goes here }}最后,在您的
GCMBroadcastReceiver队列中
GCMIntentService。
public class GCMBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Explicitly specify that GcmIntentService will handle the intent. ComponentName comp = new ComponentName(context.getPackageName(), GCMIntentService.class.getName()); // Start the service, keeping the device awake while it is launching. // startWakefulService(context, (intent.setComponent(comp))); //setResultCode(Activity.RESULT_OK); GCMIntentService.enqueueWork(context, (intent.setComponent(comp))); }}在我们将目标sdk更新为27之后,此实施对我来说很有效,希望它对您有用。



