我遇到了一种严重的冲突。我的应用程序是一个远程服务,基本上在屏幕进入睡眠状态时启动一项活动。它是如何做到这一点的,非常简单,通过屏蔽广播接收器,然后明确打算作为新任务启动活动。该活动主要负责响应关键事件和显示一些简单文本。
由于在2.0中添加了一些窗口标志,活动可以做到这一点。它们的创建方式可以将它们置于锁屏顶部,也可以完全关闭锁屏。这样,他们基本上没有锁定屏幕必须由用户解除焦点。2.0中的闹钟使用这些标志来唤醒设备并显示闹钟对话框。我使用它们在屏幕休眠时放置我的活动,以便用户看到自定义的唤醒锁定屏幕。我们在屏幕关闭时创建它的原因是为了消除用户在醒来时的延迟体验,即首先看到锁屏,然后看到活动出现。同时,在睡眠时立即做这件事可以让它集中注意力,从而有效地处理关键事件。
作为控制,我尝试在创建远程服务时保持部分wakelock启动,但问题仍然存在。所以我不认为CPU进入睡眠状态是个问题。由于只有这些特定的应用程序导致问题重复,我无法想象为什么活动启动失败。这些应用程序会做什么来干扰另一个应用程序的创建能力?我使用singleInstance作为启动模式,这样我就可以确保活动永远不会被用户进程调用。我希望它在用户解锁时消失,并且它可以像这样正常工作,只要它能够被创建。singleInstance确保我可以使用相同的锁屏处理,并根据远程服务监视的用户操作执行特定的操作。
我的源代码可以在我的项目页面上查看。
http://code.google.com/p/mylockforandroid/source/browse/#svn/trunk/myLock/src/i4nc4mp/myLock
这似乎是一件非常不理性的事情,仅仅是由特定的应用程序引起的。除非我在活动定义中犯了一些严重的错误,否则我对解决方案感到困惑和不知所措。