2

私はアラームアプリを構築しています。アラームがインテントを開始すると、「魔法」が発生するレシーバーが開始されます。どういうわけか、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。それでも、変更しても、レシーバーは複数回呼び出されます。

4

1 に答える 1

0

最近、同じ動作をするアプリケーションをデバッグしていました。デバイスの電源が入っていて、インテントを処理するサービスがバックグラウンドにある間も、メッセージが蓄積されていました。

あなたが注意するかもしれないいくつかの潜在的な問題:

  • アラームをインターバル タイマーとして使用している場合 ( setRepeating()またはそれほど優れていないシリアル メソッドを介して)、[アプリケーション/サービス] が実行されていない間 (つまり、デバイスがオフになっている間 -ドキュメントを参照) 、タイマーが数回オフになる可能性があります。 . その結果、いくつかのメッセージがハンドラーでキューに入れられ、アプリケーションがフォアグラウンドに戻されると、ハンドラーはキューを介して実行され、複数のアラーム インテントが消費されます。

  • Serviceインテントを受け取るために拡張するクラスを使用しており、 でサービスを開始しましたSTART_REDELIVER_INTENT。サービスがタスクの途中でバックグラウンドになっている場合: サービスは部分的に正常に実行され、一時停止するために中断されます。再起動すると、インテントが再配信され、2 度目に処理されます。

  • recycle()あなたのメッセージ - または単に拡張IntentServiceします。

デバッグするには、次のことをお勧めします。

  • addExtra(String, int)1 つのインテントが複数回配信されているか、複数のインテントが同時に消費されているかを確認するには、( を介して)インテントにインクリメント エクストラを追加します。

受信者からのコードも質問に含める必要があります。

それは私が持っているすべてです。

于 2013-10-09T21:39:55.720 に答える