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 :(得分:0)
请勿使用您自己的服务定期启动其他服务,而是使用AlarmManager
服务(就像您已经在做的那样)。不需要第二次服务恕我直言。
AlarmManager
是一项系统服务,永远不会被Android杀死,它已经完全按照您自己的服务执行:定期启动(或在指定时间单击)。
在“绑定到它的客户端”上:偏离主题,但这意味着使用对Context.bindService()
的调用将其他组件(如其他服务或活动)连接到它。有关详细信息,请查看dev guide。
答案 1 :(得分:0)
您实际上并不需要保持服务的活力。
在这里,您设置AlarmManager
,即使手机正在睡眠,也可以在时间唤醒您的IntentService。这项服务完成了这项工作,而不是你的工作。
我保证每天运行此代码和我的服务 不会被杀?
您在MyHibernatedService
中提供的代码只能执行一次,以设置闹钟,然后您将不再需要它。如果它是MyHibernatedService
唯一能做的事情,那么你完全不需要它。
例如,您可以在意图服务中创建一个静态方法来设置警报,并根据您的需要从任何地方调用它(可能是您以前用MyHibernatedService
开始的地方)。
此外,如果您在开始使用意向服务时并不需要非常准确,请选择setInexactRepeating()
而不是setRepeating()
。