任务经理杀死后服务再次启动

时间:2014-04-21 14:01:32

标签: android android-service android-alarms

我有各种选项来在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);
 }
}

1 个答案:

答案 0 :(得分:0)

根据CommonsWare,我只需要用onStartCommand()覆盖START_NOT_STICKY,这将使我的服务与Android紧密相关,并且一旦它被{{1杀死,就不会开始}}。这就是运行TaskManager所期望的行为。

代码段:

Service