2013-04-25 125 views
0
public class MyHibernatedService extends Service{ 
    public void onCreate() { 
     super.onCreate(); 
     //declaring the intents .. 
     //some codes... 

     AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
     PendingIntent pendingIntent = PendingIntent.getService(this, 0, IntentServiceToBeRun, 0); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.add(Calendar.MILLISECOND, 10000); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 
     } 
} 

我希望我的Service到每一天在某个时间推出的IntentService。然而,我读过互联网上的某个地方,StackOverflow,谷歌等。那Service不能永远活着,这是Android的工作原理。无论何时Android需要内存或使用太多内存,它都必须杀掉Service。 什么保证我这个代码每天都会运行,并且我的Service不会被杀死?执行从服务计划任务,并保持该服务活

编辑:

作为服务已启动或已绑定客户端的Android系统将试图保持过程托管服务各地只要:

我在Android文档注意

“客户绑定到”它们实际上意味着什么?

回答

0

不要使用自己的服务来定期启动另一项服务,而应该使用AlarmManager服务(如您已经这样做)。这不需要这第二个服务恕我直言。

AlarmManager是一个系统服务,不会被Android杀死,它已经完成了你自己的服务所要做的事情:定期启动(或在特定时间单次启动)。

关于“绑定到它的客户端”:无关紧要,但它意味着其他组件(如其他服务或活动)通过调用Context.bindService()连接到它。有关详细信息,请检查dev guide

0

实际上并不需要保持服务的活力。 在这里,您正在设置AlarmManager,即使手机正在睡眠,也可以在您到达时唤醒您的IntentService。这项服务完成这项工作,而不是你的。

什么保证我这个代码每天都会运行,我的服务 不会被杀死?

您在MyHibernatedService中提供的代码只能执行一次,以设置闹钟,那么您就不再需要它了。如果它是MyHibernatedService所做的唯一的事情,那么你完全不需要它。

你可以在你的意图服务中创建一个静态方法来设置闹钟,并根据你想要的地方(可能是你开始使用的地方MyHibernatedService)在任何地方调用它。另外,如果您的意图服务开始时间确实不需要精确的准确度,则更愿意使用setInexactRepeating()而不是setRepeating()