我已经读了上百篇SO和其他文章。我找不到答案。预先感谢您的帮助。
注意:我将应用程序中的主要事件保存到sharedPreferences中。这样,我便可以记录并“回放”事实发生后手机进入打ze模式时发生的情况。
compileSdkVersion 26
minSdkVersion 24
targetSdkVersion 26
目标:从DOZE / SLEEP中唤醒电话,调用一些异步的http / rest API,收集少量数据,做出决定,然后返回睡眠状态。
问题:在从警报中调用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中。我也尝试在MainActivity中放置3分钟的WakeLock到期。
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中唤醒电话,调用一些异步http / rest API,收集少量数据,做出决定并返回睡眠的最佳方法。