Android线程在几分钟后挂起并返回

时间:2018-10-18 07:10:37

标签: android multithreading android-8.0-oreo android-doze android-doze-and-standby

我的Android项目使用ExecutorServices和Looper线程。 在奥利奥(Oreo)甚至棉花糖上,我开始遇到以下问题:

不幸的是,由于我已升级到SDK 27,因此从休眠状态返回时,线程要等几分钟后才能恢复。

t1: Receiving event
    FG Service Starts, and creates a job for thread T.
    FG Service onStartCommand exits - thread T still running

t2 - may be milliseconds later: Doze. T is frozen (not blocked, just not executing).

t3: Maintenance Window: Some AlarmManager event or Push
    starts and finishes. T is still frozen.

t4 - minutes later: Another maintenance window. T wakes up where it stopped on t2.

在阶段t2,不一定是使T进入睡眠状态的阻塞触发器。可以是对HTTP发布的调用,也可以是handle.post{}的调用(这只是将Runnable放入队列中)。

所以,我的问题是:

  1. 在维护时段内,对线程有哪些限制?
  2. 用于前台服务的AlarmManager闹钟意图应启动维护窗口。这是“受限制的维护时段”吗?
  3. 我是否应该在维护窗口中获得几秒钟的宽限期? (t3)
  4. 如果onStartCommand退出后Doze处于忙碌状态-最好的做法是在主线程外调用作业,以确保我确实有几秒钟的时间来处理事件并向服务器报告冻结? 不能选择主线程,并且Firebase不太准确。

谢谢

0 个答案:

没有答案