2011-09-14 16 views
0

私はいくつかのデータ処理を行うアプリケーションを持っており、新しい項目が見つかるとステータスバーのユーザーに通知します。このプロセスは、設定された時間内にAlarmManagerとして実行されます。すべて正常に動作しますが、ユーザーがアプリケーションを積極的に使用している間に通知されるのが理想的ではありません。つまり、AlarmManagerは基本的に中断されます。私は考えることができる唯一の解決策は、常に起動/これに似た主な活動のonResumeメソッドでアラームを停止されていますAlarmMangerは常に起動し、停止、悪い練習ですか?

@Override 
public void onResume() 
{ 
     AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
     Intent myIntent = new Intent(this, AlarmReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, myIntent, 0); 
     alarmManager.cancel(pendingIntent); 
     alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 600000, 600000, pendingIntent); 
} 

これは誰にでもありませんが、私は考えることができる最高のソリューションを提供します。それが悪い習慣であるか、よりよい解決策があるかどうか疑問に思うだけですか?ありがとう。

答えて

0

あなたのAlarmReceiver(またはそれが呼び出すサービス)にアプリが表示されているかどうかを確認してください。あなたは、あなたのアプリケーションとAlarmReceiver/Serviceの間でいくつかの状態を共有する必要があります。 onResume中にフォアグラウンドにあり、onPause中にバックグラウンドにあることをAlarmReceiver/Serviceに伝える基本アクティビティを持つことができます。 AlarmReceiver/Serviceは、アラームが消えたときにこの状態を単純にチェックし、通知を表示するかどうかを決定するために使用することができます。

関連する問題