Вызывает ли удаление приложения из списка недавних приложений в Android отключение любых сигналов тревоги, которые были установлены диспетчером сигналов в приложении Android? - PullRequest
0 голосов
/ 04 апреля 2020

В настоящее время я занимаюсь разработкой приложения Android с использованием Android Studio. Одно из моих требований - запускать BroadcastReceiver в точное время. Он работает отлично, пока приложение не работает в фоновом режиме. Как только приложение будет удалено из списка последних приложений, оно не будет работать. Я не знаю, есть ли проблема в диспетчере аварий или в BroadcastReceiver.

XML:

<receiver android:name=".BackgroundServer"
    android:permission="TODO"
    tools:ignore="ExportedReceiver">
    <intent-filter>
        <action android:name="birthday.wallpaper.WALLPAPER_CHANGE"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</receiver>

И в MainActivity (Java):

Intent intent = new Intent(this,BackgroundServer.class);

PendingIntent pendingIntent = PendingIntent
        .getBroadcast(getApplicationContext(), 0,intent,0);

AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
assert manager != null;
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
        calendar.getTimeInMillis(),
        AlarmManager.INTERVAL_DAY,
        pendingIntent
);

В моем настраиваемом приемнике вещания я установил диспетчер аварийных сигналов в методе onStart, равном MainActivity. Это означает, что, как и аварийные сигналы, код BroadcastReceiver должен быть выполнен.

Хорошо, он работает, когда приложение находится на переднем плане или когда приложение закрыто, но присутствует в списке последних приложений. Код не выполняется, когда я пытаюсь удалить приложение из списка последних приложений. Я не знаю, отключен ли будильник, когда я удаляю приложение из списка недавних приложений, или, возможно, Broadcast Receiver прекращает слушать трансляции.

1 Ответ

0 голосов
/ 04 апреля 2020

Вы использовали объявленный приемник c. Это означает, что он создан и зарегистрирован в вашей деятельности. Вы объявляете этот тип получателей и регистрируетесь в onResume (). Когда вы прекращаете свою деятельность, вы должны отменить ее регистрацию в onStop (). Если вы не отмените регистрацию, вы получите сообщение об ошибке LeakIntentMemory, однако действие отменяет регистрацию самостоятельно, и приложение не падает.

Но когда вы посмотрите на logcat, вы увидите ошибку LeakIntentMemory , И этот тип приемников работает, как вы говорите. Когда вы закрываете приложение, вы ничего не можете получить. Если вы хотите получать что-то, когда ваше приложение закрывается, вы должны объявить получателя в android манифесте. Для большего количества примеров проверьте мой GitHub https://github.com/okanSerdaroglu/BroadcastReceivers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...