gpt4 book ai didi

android - onNewIntent() 在手机唤醒之前不会触发

转载 作者:太空狗 更新时间:2023-10-29 13:36:34 26 4
gpt4 key购买 nike

我发现了一些有趣的行为,但不知道为什么或如何绕过它。该 Activity 是单任务 Activity ,这意味着当 Activity 位于堆栈顶部时,onNewIntent() 用于 Activity 。这很好用,当手机屏幕打开时。但是,一旦屏幕关闭,直到手机“唤醒”并且此时调用 onNewIntent() 时才会收到新的 Intent 。如果 Activity 不在栈顶且手机处于 sleep 状态,则启动 Activity 并调用 onCreate() 方法。

Activity 声明为:

<activity android:name=".MyActivity" 
android:launchMode="singleTask"
android:alwaysRetainTaskState="true" >

Activity 也以 FLAG_ACTIVITY_NEW_TASK 标志启动。 Intent 是从广播接收器启动的。如果手机处于 sleep 状态并且广播了 Intent ,则该 Activity 会使用以下标志唤醒手机:

    getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

但是,直到手机处于堆栈顶部时处于唤醒状态,才会创建 Activity 。现在我很困惑,不知道从哪里开始。我的 Activity 也使用 onSaveInstanceState()。该 Activity 是一个 FragmentActivity 并包含一个 fragment 。

如有任何帮助,我们将不胜感激!

最佳答案

However the activity is not created until the phone is awake when it is on the top of the stack.

据我所知,这是设计使然。唤醒手机并使其保持清醒的唯一方法是获取唤醒锁。

http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

典型的模式是您收到一些 Intent 来唤醒您的应用程序,例如网络状态已更改或其他。在您的接收器中,在 onHandleIntent() 中,您获取了一个唤醒锁。你启动一个服务来做一些工作,服务完成后释放唤醒锁。

在您的情况下,向您的 Activity 发送 Intent 的接收者可以获取部分唤醒锁,然后您的 Activity 可以获取屏幕唤醒锁。请记住,只要您按住唤醒锁,手机就无法休眠……导致它消耗更多电池。因此,唤醒锁是非常危险的事情。

请注意,您必须关闭锁。如果您在 onHandleIntent() 返回时没有持有唤醒锁,设备会立即返回 sleep 状态。所以它会是这样的,

receiver: acquire partial lock
activity: acquire screen lock
activity: release partial lock

您也可以暂时锁定屏幕,然后松开……屏幕会亮起,然后根据显示超时设置正常熄灭。

关于android - onNewIntent() 在手机唤醒之前不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9899751/

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