gpt4 book ai didi

java - 屏幕超时时调用 Activity onPause 方法吗?

转载 作者:行者123 更新时间:2023-11-30 09:44:39 25 4
gpt4 key购买 nike

我无法理解屏幕超时功能以及这将如何影响在我的 Activity 中运行的代码。 onPause() 是否在屏幕超时时被调用?

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

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

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

问候

最佳答案

好的,所以我找到了答案,我觉得我的问题一开始有点令人费解,所以我会尝试回答各个部分,并添加我的实际解决方案....

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

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

问题出在 AsyncTaskService 上。不管它的设置方式如何,(startForegrond() 等)当 cpu 关闭时,后台线程将暂停一段时间(通过按锁定键,或等待屏幕显示)暂停)。我发现它暂停了大约 1 分钟的间隔。

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

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

不要忘记在完成后释放它,因为这对电池来说很昂贵。

关于java - 屏幕超时时调用 Activity onPause 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7794084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com