我不知道为什么,但我的服务(以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仍然在捕捉新的位置。
有人有想法吗?
答案 0 :(得分:3)
Android会自动杀死在后台运行的应用程序很长时间(30分钟到1小时)。
阻止此操作的唯一方法是将服务设置为foreground service
。
为此,请使用以下内容:
startForeground(messgae, notification);
这将显示一个持久通知,通知用户您的服务正在运行。
其他选项是使用AlarmManager
每2分钟启动IntentService
。
问候。
答案 1 :(得分:0)
我过去曾遇到过ame问题,你可能不想这样做,但它对我有用。我设置了2个服务,主要工作人员和帮助者。帮助者经常会确保工作人员正在运行,并且工作人员将确保帮助程序保持运行。在这个例子中,如果其中一个碰巧被系统杀死,它将被另一个重新启动。我从未让他们两个同时死去。
同样,这是我的解决方案,可能不是您想要做的事情。
答案 2 :(得分:0)
一种解决方案是使用警报,以两分钟的间隔或任何您决定的方式启动您的服务。但是这样做会耗尽电池,所以请记住这一点。