BroadcastReceiver не вызывается после закрытия приложения - PullRequest
0 голосов
/ 07 декабря 2018

Я сделал приложение, которое должно работать в фоновом режиме.Приложение в основном регистрирует входящие звонки и отправляет метку времени на мой сервер.Проблема в том, что приложение не работает должным образом, когда его убивают через некоторое время.Я предполагаю, что ОС просто убивает мое приложение, но я не знаю почему.Вот как я регистрирую свое приложение в AndroidManifest.xml файле

    <receiver
            android:enabled="true"
            android:name=".receiver.CallReceiver">
        <intent-filter android:priority="99">
            <action android:name="android.intent.action.PHONE_STATE"/>
        </intent-filter>
        <intent-filter android:priority="100">
            <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
        </intent-filter>
    </receiver>

А вот мой CallReceiver

class CallReceiver: BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        // a lot of logic to send request using retrofit to my server
    }
}

Так что проблема в том, что через некоторое время, возможно (6-10 часов) приложение не 'Не отправлять любую информацию на сервер.Почему это?После повторного открытия приложения оно снова начинает отправлять данные.

1 Ответ

0 голосов
/ 07 декабря 2018

Обновление:

С здесь

есть тайм-аут в 10 секунд, который система разрешает, прежде чем рассматривать приемник длябыть заблокированным и быть убитым кандидат

Итак, у широковещательного получателя очень низкая продолжительность жизни (10 секунд).Вы можете создать службу для сетевых вызовов.

Оригинал:

С https://developer.android.com/guide/components/services

Примечание. Если ваше приложениеЦелевой уровень API 26 или выше, система накладывает ограничения на запуск фоновых сервисов, когда само приложение не находится на переднем плане.

Итак, если вы хотите, чтобы ваш сервис выживал в фоновом режиме, у вас естьчтобы показать уведомление, чтобы сделать его сервисом переднего плана, и именно поэтому Android не убил бы его.

другое чтение, в котором говорится то же самое:

До Android 8.0, обычныйОдним из способов создания службы переднего плана было создание фоновой службы, а затем продвижение этой службы на передний план.С Android 8.0 есть осложнение;система не позволяет фоновому приложению создавать фоновый сервис.По этой причине в Android 8.0 появился новый метод startForegroundService () для запуска нового сервиса на переднем плане.После того, как система создала службу, у приложения есть пять секунд, чтобы вызвать метод startForeground () службы, чтобы отобразить видимое пользователю уведомление новой службы.Если приложение не вызывает startForeground () в течение определенного времени, система останавливает службу и объявляет приложение ANR.

source: https://developer.android.com/about/versions/oreo/background

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