我的应用由于Android Oreo电池优化而被强制停止,之后通知将被忽略

时间:2019-02-28 10:13:39

标签: java android broadcastreceiver google-cloud-messaging kill

你好,我遇到背景限制的麻烦。 我目前正在测试的手机是Android 8.1上的Nokia 7 plus

我的应用暂时运行良好,有一个 jobScheduler 可以在后台每20分钟执行一次任务。

但是在某些时候,为了节省电池,我相信android关闭了该应用程序,之后广播接收器无法按预期工作:

2019-02-28 10:13:25.925 3000-3000/? W/GCM: broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10000000 pkg=myapp.pkg (has extras) }

当应用程序在后台运行且未强制停止时,仍显示消息“广播意图回调:result = CANCELLED” ,但通知有效。

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    Log.d(this.getClass().getName(),"Gcm Info Received");
    new Intent(context, GcmIntentService.class);
    GcmIntentService.enqueueWork(context, intent);
}

当用电池强制停止时,我的广播接收器中的日志“收到Gcm信息” 甚至没有显示。

清单

<receiver
        android:name=".GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="myapp.pkg" />
        </intent-filter>
    </receiver>

在我的 GcmIntentService 中,我在发送广播之前添加了以下标志:

intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
sendBroadcast(intent);

通知消息非常重要,我认为android自动强制停止应用程序确实很愚蠢。只有用户交互才可以做到这一点...

我看到了这个线程:https://github.com/firebase/quickstart-android/issues/89#issuecomment-233786785

参与者这样的话应该是用户有意做的。就我而言,该应用程序从昨天上午11点到今天凌晨1点一直在后台运行,然后才停止运行,而不是被我...

我还尝试从该应用程序的签名apk版本对其进行测试,因为我看到有人说,仅当该应用程序处于调试状态时,才会发生此错误。

我也阅读了该线程:How to restart Service after Force Stop of app

所以我想知道是否有真正的解决方案,而不是要求每个用户在设置中关闭电池优化?

解决方案可能是应用没有被电池优化强行杀死,或者在强行杀死后以某种方式重新启动了应用。

0 个答案:

没有答案