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

2024-01-10

我发现了一些有趣的行为,但不知道为什么或如何解决它。 该活动是一个单任务活动,这意味着 onNewIntent() 是针对该活动的,而该活动位于堆栈顶部。这工作得很好,很好,当手机屏幕打开时。然而,一旦屏幕关闭,直到手机“唤醒”并且此时 onNewIntent() 被调用时,才会收到新的意图。如果该活动不在堆栈顶部并且手机处于睡眠状态,则该活动将启动并调用 onCreate() 方法。

该活动声明为:

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

该活动也使用 FLAG_ACTIVITY_NEW_TASK 标志启动。该意图是从广播接收器启动的。如果手机处于睡眠状态并且意图被广播,则活动会使用以下标志唤醒手机:

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

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

任何帮助将不胜感激!


但是,直到手机唤醒时才会创建活动 位于堆栈顶部。

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

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

典型的模式是您收到一些唤醒应用程序的意图,例如网络状态已更改或其他什么。在您的接收器中,在onHandleIntent(),你抓住了一个唤醒锁。您启动一个服务来执行某些工作,该服务在完成后会释放唤醒锁。

在您的情况下,向您的活动发送意图的接收器可以获取部分唤醒锁,然后您的活动可以获取屏幕唤醒锁。请记住,只要您按住唤醒锁,手机就无法睡眠......导致它使用更多的电池。因此,唤醒锁是非常危险的事情。

请注意,您必须将锁移开。如果您在以下情况下没有保持唤醒锁onHandleIntent()返回后,设备可以立即返回睡眠状态。所以它会是这样的,

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

您也可以暂时锁定屏幕,然后释放它......屏幕会根据显示超时设置正常打开,然后关闭。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

onNewIntent() 在手机唤醒之前不会触发 的相关文章

随机推荐

  • facebook-api:Facebook Connect 跨域接收者 URL 是什么?

    我正在尝试配置我的 Facebook 应用程序可调整大小 文档位于http wiki developers facebook com index php Ressized IFrame http wiki developers facebo
  • 编译时检查特征特化是否具有唯一的 id

    我看过很多帖子解释如何为类生成唯一的 id 就我而言 id 由用户选择 出于各种原因 但我想确保没有 id 在不同的类中使用两次 我将问题简化为以下代码 struct A struct B template
  • html.hidden 未在 asp.net MVC 核心 Razor 视图中设置值

    我正在开发一个 ASP NET MVC 核心应用程序 我有一个带有如下表单元素的弹出窗口 using Html BeginForm AddIVR ITPVoice FormMethod Post new role form Html Hid
  • 应用程序处理错误:意外的 CFBundleExecutable 密钥

    我正在尝试在启用 bitCode 的情况下向 Apple 提交 每次我提交时我都会收到这封电子邮件 我们发现您最近交付的 MyAPPP 存在一个或多个问题 要处理您的交货 必须纠正以下问题 意外CFBundle可执行密钥 Payload M
  • Sass 从模块扩展类

    使用 sass 中的新模块系统 使用 use 而不是 import 我如何在一个文件中定义一个类并使用 extend 在另一个文件中使用它 File 颜色 scss element background color blue 主文件 use
  • 如何将包发布到 TeamCity nuget 服务器?

    我们有一个为 nuget 配置的 TeamCity 7 服务器 它托管在没有外部连接的计算机上 是否可以将包发布到 TeamCity nuget 服务器 例如 如果我们想要将 log4net 包依赖项添加到我们的项目之一 则需要将其发布到
  • 查找数组中大于或等于N的数

    如果我有一个 PHP 数组 array 具有价值观 45 41 40 39 37 31 我有一个变量 number 38 如何返回值 39 因为这是数组中最接近 38 向上计数 的值 Regards taylor
  • 通过 fontforge 脚本获取字形宽度

    为了获取字形宽度 我将TTF字体为AFM 然后解析内容AFM文件来获取每个字形的宽度 由于从技术上来说 fontforge正在从二进制文件中捕获字形宽度TTF文件 然后创建一个AFM字体文件基于AFM标准模板 我想知道是否可以直接转换TTF
  • 如何检查 django 模板中的复选框是否被选中

    我需要检查 django 模板中是否选中了复选框 如果为 False 则打开其他一些字段 我已经尝试过类似的事情 if closed in is closed 但无论复选框是否选中 它们始终为 True 这是我在模板中的复选框属性
  • 如何在c#中获取先前的控制权

    如何在c 中获取先前的控制权 有一种方法可以GetNextControl但没有办法获得先前的控制权 谁能告诉我如何得到这个 提前致谢 GetNextControl Control control bool forward 您可以指定是否要向
  • 将最喜欢的方法添加到 IntelliJ 中的静态导入?

    在 Eclipse 中 可以配置某些 最喜欢的 类 在调用代码完成时将查找这些类 以查看是否可以为方法添加静态导入 这位于首选项 gt Java gt 编辑器 gt 内容辅助 gt 收藏夹 例如 我可以开始输入assertT Eclipse
  • Android CursorLoader,尝试重新查询已经关闭的游标

    我刚刚开始使用新的cursorLoader 但遇到了问题 下面的代码只是为了理解cursorLoader是如何工作的 但我不断得到 当我恢复此活动时 尝试重新查询已关闭的游标 在我开始使用 CursorLoader 之前 该应用程序运行良好
  • 从 cuda 内核中访问类数据成员 - 如何设计正确的主机/设备交互?

    我一直在努力改变一些cuda C代码变成更面向对象的代码 但以我目前对cuda运行机制的理解来说 我的目标似乎并不容易实现 对于这种情况我也找不到很好的解释 毕竟这可能是不可能的 我有一个global类的对象myClass保存一个要填充到内
  • 在命名空间内设计

    我试图将我的 Rails 项目拆分为普通用户的前端和管理员的后端 因此 我创建了一个命名空间 admin 以便我可以在地图管理中轻松控制管理特定的控制器方法 布局 身份验证 我仅使用 Devise 来注册 验证我的管理员 因为它仅用于管理员
  • 未找到:当我使用张量流和烧瓶加载模型时,容器本地主机不存在

    我是一个研究深度学习的新手 我使用张量流加载保存的模型并使用 Flask 创建 API 但收到错误 容器本地主机不存在 当我预测时 请帮我解决它 谢谢 张量流版本 1 13 1 喀拉拉邦版本 2 2 4 烧瓶版本 1 0 3 我通过命令 p
  • 如何在gcc中获取当前的c方言?

    C 编程新手 In gcc std设置编译的 C 标准 例如gcc std c99 可以知道当前制定的是哪个C标准吗 存在以各种模式定义的各种预处理器符号 您可以使用gcc E dM x c dev null获取所有预定义的预处理器符号的转
  • 如何在oracle sql中连接2个具有不同记录数和列数的查询?

    我有三张桌子 Employee leave EmployeeID Time Period leave type Employee EID Department Designation leave eligibility Department
  • 无法将依赖项自动连接到自定义验证器中

    我希望使用自定义验证器来验证我的对象属性 并且我需要注入一些 bean 所以我无法自动装配任何 bean 并且出现此异常 java lang NoSuchMethodException com MyValidatorValidator
  • 一起使用 jQuery :has() 和 :contains() 选择器

    我有一个包含标签元素的列表项元素 我想选择列表项元素 has 选择器 标签元素内有我想要匹配的文本 contains 是否可以用一行 jQuery 完成这两件事 如果不是 那么根据子标签元素的内容选择 li 元素的优雅方法是什么 li li
  • onNewIntent() 在手机唤醒之前不会触发

    我发现了一些有趣的行为 但不知道为什么或如何解决它 该活动是一个单任务活动 这意味着 onNewIntent 是针对该活动的 而该活动位于堆栈顶部 这工作得很好 很好 当手机屏幕打开时 然而 一旦屏幕关闭 直到手机 唤醒 并且此时 onNe