在接收者呼叫之后,Intent再调用一次

时间:2012-10-13 12:11:43

标签: android android-intent broadcastreceiver

我正在构建一个警报应用程序。当警报启动意图时,启动接收器,发生“魔法”。不知何故,广播接收器内的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。但是,如果我改变它,接收器仍然会被调用一次。

1 个答案:

答案 0 :(得分:0)

我最近在调试具有相同行为的应用程序。当设备打开并且处理意图的服务被搁置时,它仍会累积消息。

您可能需要注意的一些潜在问题

  • 如果您将闹钟用作间隔定时器(通过 计时器setRepeating(),或者一些不太精彩的串行方法) 可以在[应用程序/服务]没有的情况下多次关闭 运行(即设备关闭时 - see the doc)。结果 是几个消息在处理程序中排队,当时 应用程序返回到处理程序将运行的前台 通过队列 - 将消耗多个警报意图。

  • 您正在使用扩展Service的类来接收意图,并且 您使用START_REDELIVER_INTENT开始了您的服务。当。。。的时候 服务是中间任务的背景:它已成功部分执行 并被打断暂停。重新启动时 意图重新交付并第二次处理。

  • recycle()您的消息 - 或者只是扩展IntentService

要进行调试,您可能需要

  • 为每个意图添加一个递增的额外内容(通过addExtra(String, int))以查看是否多次传递了一个意图,同时消耗了多个意图。

您还应该在问题中包含接收者的代码。

这就是我所拥有的一切。