【问题标题】:Android - Having a service run every day at 4AMAndroid - 每天凌晨 4 点运行服务
【发布时间】:2010-06-11 05:33:08
【问题描述】:

我想知道每天凌晨 4 点运行服务的最佳做法。

认为我应该这样做的方式是使用 AlarmManager 创建一个新的重复警报,并让它在凌晨 4 点运行服务。问题是,我不确定将代码放在哪里来设置警报。

我是否在我的主要活动中将其作为 OnCreate 方法中的首要任务之一?我是否使用广播接收器和意图做一些时髦的事情?当用户更新我的应用程序时会发生什么?用户重启时会发生什么?

任何有关这些问题的帮助将不胜感激 :) 示例代码也会有所帮助!

巴拉

【问题讨论】:

    标签: android broadcastreceiver alarmmanager android-service


    【解决方案1】:

    您可以在每次手机启动和应用程序启动时安排闹钟。要收听手机开机事件,您可以使用 BroadcastReceiver。

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    .
    .
    .
    <receiver android:name=".BootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    

    有关完整示例,您可以查看 Photostream 应用程序http://code.google.com/p/apps-for-android。它使用完全相同的方法。

    【讨论】:

    • 所以看起来我创建了一个广播接收器,它只是调用一个服务并告诉它安排一个开始时间。听起来很简单。我的应用程序何时开始呢?我应该在我的第一个活动中安排服务还是可以调用不同的意图?
    • 最后一个问题:当用户更新我的应用程序时如何?他们不一定会启动它或重新启动手机,但我相信我的服务此时已关闭。我该怎么办?
    • 您无法确定服务始终在运行。系统可能会在内存不足时杀死它。一个可能的克服方法是安排 larm 不是在凌晨 4 点而是每小时运行一次。这样,如果服务被终止,它将在下一小时重新启动。 Photostream 确实做了类似的事情,所以你可以看看。
    • 好吧,我的服务会有点密集。我不能让它每小时运行一次,否则它会吸干用户的电池:p 但是,感谢所有帮助。我将继续查看您提供给我的链接中的源代码,我想我可以从那里弄清楚。再次感谢!
    猜你喜欢
    • 2021-07-12
    • 2013-01-20
    • 2021-04-13
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 2021-10-02
    • 2015-12-29
    相关资源
    最近更新 更多