AlarmManger постоянно запускается и останавливается, плохая практика? - PullRequest
0 голосов
/ 15 сентября 2011

У меня есть приложение, которое выполняет некоторую обработку данных, а затем уведомляет пользователя в строке состояния, если обнаружены какие-либо новые элементы.Процесс запускается как AlarmManager в установленное время.Все работает нормально, но в идеале я бы не хотел, чтобы пользователи получали уведомление, когда они активно используют приложение, а это означает, что AlarmManager в основном должен быть приостановлен.Единственное решение, о котором я могу подумать, - это постоянно запускать / останавливать тревогу в основном методе onResume Activity, подобном следующему:

@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);
}

Это не просто, но лучшее решение, которое я мог придумать.Просто интересно, если это плохая практика или есть лучшее решение?Спасибо.

1 Ответ

0 голосов
/ 15 сентября 2011

Просто сделайте так, чтобы ваш AlarmReceiver (или служба, которую он вызывает) проверял, является ли приложение видимым или нет. Вы должны разделить некоторое состояние между вашим приложением и AlarmReceiver / Service. У вас может быть базовая активность, которая сообщает вашему AlarmReceiver / Service, что находится на переднем плане во время onResume и что это на заднем плане во время onPause. Затем AlarmReceiver / Service может просто проверить это состояние при срабатывании будильника и использовать его, чтобы решить, следует ли показывать уведомление или нет.

...