2010-01-27 28 views
1

我遇到了各种严重冲突。我的应用程序是一个远程服务,它在屏幕进入睡眠状态时基本上开始一项活动。它如何做到这一点非常简单,通过屏幕关闭广播接收器,然后显式地将活动作为新任务开始。该活动基本上负责响应关键事件并显示一些简单的文本。当某些应用程序正在运行时,StartActivity意图失败

由于在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,并发现错误。说明错误最终结果的构建 - 由于错误,用户必须尝试解锁3次,因为在唤醒时,当oncreate最终成功时,用户在正常情况下会看到活动,因为关键事件逻辑也会自动解除由于延迟onCreate,似乎不会发生,所以他们必须再次发送它睡觉。现在,活动已经正常开始,并且屏幕处于睡眠状态,预期的功能会在下次唤醒时发生 - 也可以从下载选项卡下载。

这似乎是一个非常不合理的事情,只能由特定的应用程序引起。除非我在我的活动定义中犯了一些严重错误,否则我很困惑并且没有解决方案的想法。

+0

我通过手动有任务等待尝试开始修复问题活动。不管冲突是什么,这都是时间的结果。可能是一些根深蒂固的OS过程问题。延迟是一个完美的契合,因为我确实希望我的锁定覆盖尊重5秒宽限期,当超时睡眠在键被守卫之前开始。我没有根本原因的答案。希望我做到了。 – mylock 2010-01-27 09:41:02

+0

另外,在屏幕上获取屏幕上的部分唤醒锁定,直到我的活动onStart在屏幕上被调用时已解决该问题。我相信它被其他进程推迟了,因此不能在cpu睡眠之前完成,所以任务的线程正在解决它,但wakelock让我使代码更有效 – mylock 2010-02-03 06:03:20

回答

1

答案其实是一个已经在审查一段时间的android中的错误。它与家庭钥匙有关。出于某种原因,启动活动调用是因为新的任务在主键最近启动后停止。在测试中我从未注意到这个连接。该错误不统一和一致性的因素是,是否home键也有问题

这里唤醒过程中使用的是错误报告:http://code.google.com/p/android/issues/detail?id=4536

相关问题