Как установить временное событие, которое будет продолжать выполняться, даже если приложение остановлено

#android

#Android

Вопрос:

Мне нужно, чтобы процесс запускался всякий раз, когда конечный пользователь нажимает на кнопку отправки. Приложению необходимо пытаться обрабатывать данные на экране каждые X минут, Y раз, даже если приложение не работает. Итак, ему нужно будет попытаться выполнить некоторую обработку, пока не произойдет одно из следующих событий: 1) Обработка данных, которые были отправлены, выполнена успешно 2) Обработка была повторена Y раз и по-прежнему ни разу не увенчалась успехом 3) Приложение завершается операционной системой или телефон выключен.

Если телефон конечного пользователя все еще включен, но приложение остановлено, какой правильный интерфейс использовать для этого?

Если я использую Handler / Runnable, это работает только до тех пор, пока приложение остается активным. Похоже, что AlarmManager используется, когда вы хотите, чтобы обработка выполнялась в определенное время.

Любые предложения будут с благодарностью приняты!

Комментарии:

1. используйте Android Service

Ответ №1:

Я использую этот метод для установки будильника.

 private void setAlarm(){
    Context context = getApplicationContext();
    AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, OnAlarmReceiver.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);

    myCal = Calendar.getInstance();
    myCal.setTimeInMillis(myPrefs.getLong("time", 0));

    mgr.set(AlarmManager.RTC_WAKEUP, myCal.getTimeInMillis(), pi);
    Log.i(myTag, "alarm set for "   myCal.getTime().toLocaleString());
    Toast.makeText(getApplicationContext(),"Alarm set for "   myCal.getTime().toLocaleString(), Toast.LENGTH_LONG).show();

}
  

внутри моего метода onAlarmReciever onRecieve это:

         Intent i = new Intent(context, AlarmActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
  

Итак, в основном, когда срабатывает intent, запускается AlarmActivity. Внутри этого действия вы могли бы попробовать, что бы вы ни делали, и, если это не удается, снова вызвать setAlarm ()

Комментарии:

1. Спасибо за информацию. Судя по ответам, AlarmManager — это определенно правильный путь.

Ответ №2:

У вас есть два варианта: служба или настройка будильника с помощью AlarmManager. Какой из них вы выберете, в основном будет зависеть от того, как часто вы хотите повторять попытки. Минута? Используйте сервис. Час? День? настройте будильник, чтобы не тратить ресурсы телефона на поддержание работы службы.

http://developer.android.com/reference/android/app/Service.html

http://developer.android.com/reference/android/app/AlarmManager.html

Ответ №3:

Напишите сервис для Android