Я прочитал сотни 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, собрать небольшой объем данных, принять решение, вернуться в спящий режим.