Здравствуйте, у меня проблемы с фоновым ограничением.Телефон, который я сейчас использую для тестирования, - это Nokia 7 plus на Android 8.1
Мое приложение некоторое время работает нормально, есть 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) }
Когда приложение включенов фоновом режиме, без принудительной остановки, сообщение «обратный вызов широковещательной передачи: результат = ОТМЕНЕН» все еще отображается, но уведомление работает.
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
И Contributor говорят так, как "принудительный останов" должен бытьчто-то, что пользователь делает намеренно.В моем случае приложение работало в фоновом режиме с 11 утра вчера до часа ночи сегодня, прежде чем оно было остановлено не мной ...
Я также пытался проверить его из подписанной версии приложения apk, как я виделкто-то сказал, что эта ошибка возникает, когда приложение находится только в отладке, но ничего не меняется.
Я также читал эту ветку: Как перезапустить службу после принудительной остановки приложения
Итак, я хотел бы знать, есть ли реальные решения для этого и не просить каждого пользователя отключить оптимизацию батареи в настройках?
Решение может быть в том, что приложение не будет убито силой оптимизации батареи иликаким-то образом перезапустите приложение после принудительного уничтожения.