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、谷歌等上读到过,aService不能永远活着,这就是 Android 的工作方式。Service每当Android需要内存或使用太多内存时,它都必须杀死它。什么能保证我的代码每天都会运行并且我Service不会被杀死?

编辑 :

我在 Android 文档中注意到:

只要服务已启动或绑定了客户端,Android 系统就会尝试保留托管服务的进程

“绑定到它的客户”实际上是什么意思?

4

2 回答 2

0

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

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

关于“绑定到它的客户端”:题外话,但这意味着其他组件(如其他服务或活动)使用对Context.bindService(). 有关详细信息,请查看开发指南

于 2013-04-25T11:23:08.523 回答
0

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

什么能保证我的代码每天都会运行并且我的服务不会被杀死?

您提供的代码MyHibernatedService只需执行一次即可设置警报,然后您将不再需要它。如果它是唯一可以做的事情MyHibernatedService,那么你根本不需要它。

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

此外,如果您真的不需要在您的意图服务启动时间上获得令人难以置信的准确性,请更喜欢setInexactRepeating()而不是setRepeating().

于 2013-04-25T17:10:46.877 回答