Android中的服务需求方法



我需要在Android手机上运行一个24*7的后台服务,并在开始&在手机电池电量低的情况下,每隔1小时访问一次web服务。你能给我一些建议吗?我试着读了几篇文章,但没有得到任何想法。我知道这里我需要粘贴一些代码后尝试一些东西。但我没有得到任何线索。请告诉我怎么接近?

您可能需要使用startForeground(int id, Notification notification)方法来防止系统杀死您的Service,如下所示:

一个已启动的服务可以使用start前台(int, Notification) API将服务置于前台状态,在这种状态下,系统认为它是用户主动意识到的东西,因此在内存不足时不会被杀死。(理论上仍然有可能在当前前台应用程序的极端内存压力下杀死服务,但在实践中这不应该是一个问题。)

那么你需要某种计划任务每小时运行一次。像ScheduledThreadPoolExecutor这样的东西对于这个目的是理想的,使用scheduleAtFixedRate (Runnable command, long initialDelay, long period, TimeUnit unit)方法。

每小时需要完成的任务必须作为Runnable执行并提交给您的ScheduledThreadPoolExecutor:

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor( 1 );
executor.scheduleAtFixedRate( new MyRunnableTask(), 0, 1, TimeUnit.HOURS );

Runnable任务应该是这样的:

private class MyRunnableTask implements Runnable {
   public void run() {
     //Do what needs to be done.
}

我需要在Android手机上运行一个24*7的后台服务

请不要。对于初学者来说,这是不可能的。

用户经常大声抱怨那些"24*7运行"的服务,因为这些服务毫无价值地占用了系统资源(例如RAM)。结果,在第三方任务杀手和设置中的强制停止选项之间,用户摆脱了这些服务。当它们这样做时,特别是在Android 3.1+上,你的应用程序将不会再运行,直到用户从启动器手动启动你的活动。

Android自己也会放弃这些服务,因为太多的开发者在服务管理上太草率了。

And on Start &手机电量低,每隔1小时点击一次webservice

基于这个列表,你不需要"在Android手机上运行一个24*7的后台服务"。你需要做的工作:

  • 设备启动时
  • 设备电量不足时
  • 每小时

您可以通过ACTION_BOOT_COMPLETED广播Intent发现设备何时启动。您可以通过ACTION_BATTERY_LOW广播Intent发现设备的电池电量不足。您可以通过AlarmManager找到时间流逝的时间,您可以在其中建立自己的闹钟时间表(例如,每小时)。

这三个触发器都应该在IntentService上调用startService()IntentService将允许您通过其内置的后台线程"命中web服务"。并且,当该工作完成时,IntentService 将消失,因此您不会一直占用内存。

并且,如果你想在每小时的条件下唤醒设备的睡眠模式,你可能需要使用像我的WakefulIntentService这样的东西,否则设备可能会在你试图"点击Webservice"时重新进入睡眠状态。

这样,您的服务只在运行并占用资源时才会主动向用户传递价值。当它只是在等待其他事件发生时(例如,接下来的59分钟),它不会运行并占用资源。

相关内容

最新更新