3

我不知道为什么,但我的服务(以 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 中的日志,这给了我一个信号,表明室内位置管理器仍在捕捉新的位置。

有人有想法吗?

4

3 回答 3

3

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

防止这种情况的唯一方法是将您的服务设置为foreground service.

为此,您可以使用以下内容:

    startForeground(messgae, notification);

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

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

问候。

于 2012-12-09T00:32:28.727 回答
0

我过去也遇到过同样的问题,你可能不想这样做,但它确实对我有用。我设置了 2 个服务,主要工作人员和一个助手。助手,每隔一段时间就会确保工作者正在运行,工作者将确保助手保持运行。在此示例中,如果其中一个碰巧被系统杀死,它将被另一个重新启动。我从来没有让他们两个同时死去。

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

于 2012-12-09T00:28:30.403 回答
0

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

于 2012-12-09T00:32:44.440 回答