从服务执行计划任务并保持该服务活动

时间:2013-04-25 10:52:00

标签: android android-service intentservice

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系统就会尝试保持托管服务的流程

“与之相关的客户”实际上意味着什么?

2 个答案:

答案 0 :(得分:0)

请勿使用您自己的服务定期启动其他服务,而是使用AlarmManager服务(就像您已经在做的那样)。不需要第二次服务恕我直言。

AlarmManager是一项系统服务,永远不会被Android杀死,它已经完全按照您自己的服务执行:定期启动(或在指定时间单击)。

在“绑定到它的客户端”上:偏离主题,但这意味着使用对Context.bindService()的调用将其他组件(如其他服务或活动)连接到它。有关详细信息,请查看dev guide

答案 1 :(得分:0)

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

  

我保证每天运行此代码和我的服务   不会被杀?

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

例如,您可以在意图服务中创建一个静态方法来设置警报,并根据您的需要从任何地方调用它(可能是您以前用MyHibernatedService开始的地方)。

此外,如果您在开始使用意向服务时并不需要非常准确,请选择setInexactRepeating()而不是setRepeating()