我正在构建一个警报应用程序。当警报启动意图时,启动接收器,发生“魔法”。不知何故,广播接收器内的onReceive()
方法被调用一次以上。
任何想法为什么会发生?
修改:
只有在屏幕关闭时才调用它,如果屏幕打开则不会发生。当屏幕关闭时,我调用此代码将其打开:
KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock kl = km.newKeyguardLock("MyKeyguardLock");
kl.disableKeyguard();
WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
PowerManager.ACQUIRE_CAUSES_WAKEUP |
PowerManager.ON_AFTER_RELEASE, "MyWakeLock");
wakeLock.acquire();
我做错了什么?在AndroidManifest.xml
我使用此代码注册了广播接收器:
<receiver android:name="com.xxx.xxx.myAlarmReceiver" >
<intent-filter>
<action android:name="REFRESH_THIS" />
</intent-filter>
</receiver>
我不确定REFRESH_THIS
。但是,如果我改变它,接收器仍然会被调用一次。
答案 0 :(得分:0)
我最近在调试具有相同行为的应用程序。当设备打开并且处理意图的服务被搁置时,它仍会累积消息。
您可能需要注意的一些潜在问题:
如果您将闹钟用作间隔定时器(通过
计时器setRepeating()
,或者一些不太精彩的串行方法)
可以在[应用程序/服务]没有的情况下多次关闭
运行(即设备关闭时 - see the doc)。结果
是几个消息在处理程序中排队,当时
应用程序返回到处理程序将运行的前台
通过队列 - 将消耗多个警报意图。
您正在使用扩展Service
的类来接收意图,并且
您使用START_REDELIVER_INTENT
开始了您的服务。当。。。的时候
服务是中间任务的背景:它已成功部分执行
并被打断暂停。重新启动时
意图重新交付并第二次处理。
recycle()
您的消息 - 或者只是扩展IntentService
。
要进行调试,您可能需要:
addExtra(String, int)
)以查看是否多次传递了一个意图,或同时消耗了多个意图。您还应该在问题中包含接收者的代码。
这就是我所拥有的一切。