Android:永远在后台运行服务

时间:2012-12-09 00:25:04

标签: android

我不知道为什么,但我的服务(以startService(Intent ...)开头)在一段时间后不断关闭。我希望我的服务每隔2分钟检查一次WiFiSLAM的位置,因此TimerTask正在服务中运行。我意识到我的服务正在关闭应用程序(onDestroy)并关闭屏幕后关闭。

我已经阅读了有关WakeLock的内容并试了一下:

    final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
    wakeLock.acquire();

但它仍然无效。我不知道该怎么做。我只想让我的Wifi定位框架每两分钟在后台更新一次位置。

我还将onStartCommand()的返回值设置为START_STICKY。也许它在后台运行,但是当它运行一段时间后我无法看到LogCat中的Logs,这给了我一个信号,表明indoorLocationManager仍然在捕捉新的位置。

有人有想法吗?

3 个答案:

答案 0 :(得分:3)

Android会自动杀死在后台运行的应用程序很长时间(30分钟到1小时)。

阻止此操作的唯一方法是将服务设置为foreground service

为此,请使用以下内容:

    startForeground(messgae, notification);

这将显示一个持久通知,通知用户您的服务正在运行。

其他选项是使用AlarmManager每2分钟启动IntentService

问候。

答案 1 :(得分:0)

我过去曾遇到过ame问题,你可能不想这样做,但它对我有用。我设置了2个服务,主要工作人员和帮助者。帮助者经常会确保工作人员正在运行,并且工作人员将确保帮助程序保持运行。在这个例子中,如果其中一个碰巧被系统杀死,它将被另一个重新启动。我从未让他们两个同时死去。

同样,这是我的解决方案,可能不是您想要做的事情。

答案 2 :(得分:0)

一种解决方案是使用警报,以两分钟的间隔或任何您决定的方式启动您的服务。但是这样做会耗尽电池,所以请记住这一点。