Android中的服务需求方法

时间:2011-12-16 11:23:20

标签: android web-services

我需要在Android手机上运行后台服务,该服务运行24 * 7,并且在开始和放大器上运行在移动电池电量低,每1小时打一次网络服务。你能告诉我任何方法吗?我试过阅读一些文章,但没有任何想法。我知道我需要在尝试之后粘贴一些代码。但我没有得到任何线索。请告诉我如何处理?

2 个答案:

答案 0 :(得分:1)

您可能需要使用方法startForeground(int id, Notification notification)来阻止系统按照here ScheduledThreadPoolExecutor来杀死您的Service

  

已启动的服务可以使用startForeground(int,Notification)API将服务置于前台状态,系统认为该服务是用户主动了解的内容,因此在内存不足时不会成为查杀的候选者。 (从理论上讲,服务在当前前台应用程序的极端内存压力下被杀死仍然是可能的,但实际上这不应该是一个问题。)

然后你需要某种计划任务来每小时运行一次。像scheduleAtFixedRate (Runnable command, long initialDelay, long period, TimeUnit unit)这样的东西是理想的,使用方法{{3}}。

每小时需要完成的任务必须以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.

}

答案 1 :(得分:0)

  

我需要在Android手机上运行后台服务,该服务运行24 * 7

请不要。首先,这是不可能的。

用户大声抱怨并经常关注“24 * 7运行”的服务,因为服务正在占用系统资源(例如RAM),没有任何价值。因此,在“设置”中的第三方任务杀手和“强制停止”选项之间,用户可以摆脱此类服务。当他们这样做时,特别是在Android 3.1+上,您的应用程序将不会再次运行,直到用户从启动器手动启动您的活动。

Android本身将自行摆脱这些服务,因为太多开发人员对其服务管理过于邋。。

  

在Start&在移动电池电量不足的情况下,每1小时点击一次网络服务。

根据此列表,您不需要“运行24 * 7的Android移动设备中的后台服务”。你需要做的工作:

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

您可以通过ACTION_BOOT_COMPLETED广播Intent了解设备启动的时间。您可以通过ACTION_BATTERY_LOW广播Intent了解设备的电量何时低。您可以通过AlarmManager找出时间过去的时间,您可以在此建立自己的闹钟时间表(例如,每小时)。

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

而且,如果你想让设备在每小时状态下从睡眠模式唤醒,你可能需要使用像WakefulIntentService这样的设备,否则设备可能会在你睡觉时睡着了试图“打网络服务”。

通过这种方式,您的服务仅在正在为用户提供价值时正在运行并占用资源。当它只是等待其他事件发生时(例如,接下来的59分钟),它没有运行并占用资源。