首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当屏幕超时时,是否会调用活动onPause方法?

当屏幕超时时,是否会调用活动onPause方法?
EN

Stack Overflow用户
提问于 2011-10-17 20:58:13
回答 1查看 1.6K关注 0票数 2

我很难理解屏幕超时功能,以及它将如何影响在我的活动中运行的代码。当屏幕超时时会调用onPause()吗?

我有一个运行AsyncTask的活动和相关服务,从60秒开始倒计时。我希望能够锁定屏幕,并在计时器结束时启动新服务和新活动,以发出警报并震动手机。当用户唤醒电话时,他们应该看到新的活动,其显示正在通过来自新服务的广播接收器进行更新。

我发现的是这种行为是非常不可预测的。一旦屏幕超时,它通常会发出警报,并在锁屏下显示新的活动,但这需要2-4分钟,有时根本不会发生。与等待超时相比,手动锁定屏幕似乎能获得更好的效果,但它仍然是不可预测的,而且每个手机都不同。

如果任何人对幕后发生的事情有任何想法/建议,甚至这种方法是否明智,都将不胜感激。

问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-18 20:27:47

好了,我已经找到了答案,我认为我的问题一开始就有点复杂,所以我将尝试回答各个部分,以及添加我的实际解决方案……

我有一个正在启动ServiceActivityService (其中包括一个AsyncTask)应该在后台运行,监控加速度计并对计时器进行倒计时。然后,Service定期向Activity发送广播Intent,当广播包含某些数据时,Activity需要运行一些代码。这一切都需要在屏幕关闭的情况下发生。

我的发现是,是的,当点击屏幕锁定时,Activity确实运行onPause(),但仍然完全能够执行内部BroadcastReciever类中的代码,因此这可以调用活动主流程中的方法。我想这是一种糟糕的做事方式,但它确实奏效了。

AsyncTaskService出现问题。无论后台线程的设置方式如何(startForegrond()等),当cpu关闭(通过按下LOCK键,或等待屏幕超时)时,后台线程将暂停一段时间。我发现它被暂停了大约1分钟。

答案是使用PowerManager.WakeLock并将标志设置为PARTIAL_WAKE_LOCK。这将允许屏幕关闭,但保持线程在后台全速运行。

这里的文档:http://developer.android.com/reference/android/os/PowerManager.html

完成后不要忘记释放它,因为它在电池上是昂贵的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7794084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档