我有各种选项来在Android应用和服务器之间同步数据。我正在使用AlarmManager
来触发与用户选择的同步。我有一个说Never Update (Update Manually)
,其中toStopServiceAlarm()
取消了AlarmManager
。
只要我的应用程序不被任何任务管理器杀死,它就能正常工作。一旦它被任务管理器应用程序服务杀死,我再次使用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);
}
}
答案 0 :(得分:0)
根据CommonsWare,我只需要用onStartCommand()
覆盖START_NOT_STICKY
,这将使我的服务与Android紧密相关,并且一旦它被{{1杀死,就不会开始}}。这就是运行TaskManager
所期望的行为。
代码段:
Service