我遇到了各种各样的严重冲突。我的应用程序是一个远程服务,它基本上在屏幕进入睡眠状态时启动一项活动。如何通过屏幕关闭广播接收器非常简单,然后明确意图将活动作为新任务启动。该活动基本上负责响应关键事件并显示一些简单的文本。
由于2.0中添加了一些窗口标志,活动可以做到这一点。可以通过将它们置于锁定屏幕顶部或完全关闭锁定屏幕的方式创建它们。这样它们基本上具有焦点,而不必由用户解除锁屏。 2.0中的闹钟使用标志唤醒设备并显示警报对话框。我在屏幕休眠时使用它们来放置我的活动,以便用户看到自定义唤醒锁屏。我们在屏幕关闭时创建它的原因是为了摆脱用户在唤醒时遇到的滞后,包括首先看到锁屏,然后看到活动出现。在睡眠状态下立即执行此操作也可以使其具有焦点,因此可以有效地处理关键事件。
除了某些应用程序外,该过程完美无缺。到目前为止,似乎该错误是一致的,而浏览器(甚至海豚浏览器)以及Facebook应用程序正在运行。该错误在GTalk或Launcher中从未发生过。它很少见,但仍然可以在消息传递应用程序中重复使用。我无法弄清楚为什么我的活动在这些应用程序处于活动状态时无法在睡眠状态下创建。我的远程服务仍然关闭广播屏幕并为显式意图执行startActivity,这就是我在日志中获得的全部内容。我的onCreate没有被调用。相反,当我们再次唤醒屏幕时,它会被调用。
作为控件,我尝试在创建远程服务时启动部分唤醒锁,并且问题仍然存在。所以我不相信CPU已进入睡眠状态。由于只有这些特定的应用程序导致问题重复,我无法想象为什么活动开始失败。这些应用程序可以做些什么来干扰另一个应用程序的创建能力?我使用singleInstance作为启动模式,这样我就可以确保用户进程永远无法调用该活动。我希望它在用户解锁时消失,并且它正常工作,只要它能够被创建。 singleInstance确保我可以使用相同的锁屏手柄,根据远程服务监视的用户操作执行特定操作。
我的源代码可以在我的项目页面上查看。 http://code.google.com/p/mylockforandroid/source/browse/#svn/trunk/myLock/src/i4nc4mp/myLock
我的CustomLockService和NoLockService变体都出现了问题。这两个服务将启动Lockscreen或ShowWhenLockedActivity,并且可以看到错误。构建说明了bug的最终结果 - 用户必须尝试解锁3次由于bug,因为在oncreate最终成功时唤醒,用户正常看到活动,因为关键事件逻辑也会自动解除由于延迟了onCreate,似乎不会发生,所以他们不得不再次入睡。现在活动已正确完成并且屏幕处于睡眠状态,预期的功能会在下次唤醒时发生 - 也可以从下载选项卡下载。
这似乎是一个非常不合理的事情,只能由特定的应用程序引起。除非我在活动定义中犯了一些严重的错误,否则我对解决方案的想法感到非常困惑。
答案 0 :(得分:1)
答案实际上是android中的一个错误,已经有一段时间了。它与家庭钥匙有关。由于某些原因,在最近启动主键之后,新任务将停止,因此启动活动调用。我在测试期间从未注意到这种连接。错误不一致,一致性因素是在问题唤醒过程中是否使用了主页按钮
以下是错误报告:http://code.google.com/p/android/issues/detail?id=4536