У меня есть различные варианты синхронизации данных между приложением Android и сервером. Я использую AlarmManager
для запуска синхронизации с выбором пользователя. У меня есть один, который говорит Never Update (Update Manually)
, в котором я отменяю toStopServiceAlarm()
AlarmManager
.
Que:
Он работает нормально, пока мое приложение не будет остановлено каким-либо диспетчером задач. Как только он был убит диспетчером задач, служба приложений снова запустилась с Never Update(Update Manually)
, где я уже отменил любой триггер AlarmManager
.
Может ли кто-нибудь помочь мне сохранить поведение моего приложения, даже если оно было убито диспетчером задач? Синхронизация вызывается только по выбору пользователя.
Фрагмент кода: -
public class ServiceAlarm extends WakefulBroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, UploadData.class); //UploadData is my service
startWakefulService(context, service);
}
public void startServiceAlarm(String times)
{
context = SmartConsultant.getApplication().getApplicationContext();
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(SmartConsultant.getApplication().getApplicationContext(), UploadData.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 21);
calendar.set(Calendar.MINUTE, 00);
switch(Integer.parseInt(times))
{
case 0://midnight
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);
break;
... cases for different interval of sync
}
}
public void toStopServiceAlarm(String times)
{
if (alarmMgr != null) {
alarmMgr.cancel(alarmIntent);
}
}
onStartCommand()
вернет что-то вродеSTART_STICKY
илиSTART_REDELIVER_INTENT
, и это поведение по умолчанию дляIntentService
. Вы можете позвонитьsetIntentRedelivery(false)
вonCreate()
вашегоIntentService
, чтобы отключить это. - person CommonsWare   schedule 21.04.2014extends Service
. Я не отменяюonStartCommand
in Service. Так должен ли я включатьsetIntentRedelivery(false)
в onCreate()? - person Vikalp Patel   schedule 21.04.2014IntentService
, да. В противном случае вернутьSTART_NOT_STICKY
изonStartCommand()
. Кроме того, убедитесь, что в какой-то момент вы останавливаете службу и одновременно выпускаетеWakeLock
. - person CommonsWare   schedule 21.04.2014