AlarmReceiver Бодрствующий (кратко) - PullRequest
0 голосов
/ 11 декабря 2018

Я прочитал сотни SO и другие статьи.Я не могу найти ответ.Заранее спасибо за помощь.

Примечание. Основные события в приложении я сохраняю в sharedPreferences.Таким образом, я могу записать и «воспроизвести», что происходит, когда телефон переходит в режим ожидания после факта.

compileSdkVersion 26
minSdkVersion 24
targetSdkVersion 26

Цель: вывести телефон из режима сна / ожидания, вызвать несколько асинхронных http / restAPI, собрать небольшой объем данных, принять решение, вернуться в спящий режим.

Проблема: в течение одной миллисекунды после того, как AlarmReceiver вызывается из тревоги и вызывает MainActivity, MainActivity переходит от OnCreate к OnResume, к OnStop, к OnDestroy.Звонки http / rest никогда не будут вызваны.

Я использую AlarmManager, чтобы разбудить телефон.Это работает, мой журнал (см. Выше) подтверждает это.

Intent intent = new Intent(context, AlarmReceiverMainAct.class);
amPendingIntent = PendingIntent.getBroadcast(context, trdLocal.getAmIntentID(), intent, PendingIntent.FLAG_CANCEL_CURRENT);
alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, trdLocal.getWakeTime(), amPendingIntent); // requires API 23+
alarmManager.set(AlarmManager.RTC_WAKEUP, trdLocal.getWakeTime(), amPendingIntent);

У меня есть AlarmReceiver для перехвата вышеупомянутого действия AlarmManager.Приемник тревог вызывает MainActivity.Это работает, мой журнал (выше) доказывает это.

Я попытался поместить 3-минутный истекающий WakeLock в AlarmReceiver.Я также попытался поместить 3-минутный WakeLock с истекающим сроком в MainActivity.

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK |
        PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "AlarmActivity");
    mWakeLock.acquire(timeOut);

Решит ли WakeLock мою проблему?Если нет, то как лучше всего разбудить телефон от DOZE / SLEEP, вызвать несколько асинхронных API http / rest, собрать небольшой объем данных, принять решение, вернуться в спящий режим.

...