Android:在后台永久运行服务

4
我不知道为什么,但我的服务(使用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中看到日志,这表明indoorLocationManager仍在捕获新位置。
有人有什么想法吗?
3个回答

4

安卓系统会自动在后台停止运行长时间未使用(30分钟到1小时)的应用程序。

唯一避免这种情况的方法是将您的服务设置为 前台服务

要实现这一点,您可以使用以下方法:

    startForeground(messgae, notification);

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

另一种选择是使用AlarmManager每2分钟启动一个IntentService

祝好。


那么,WhatsApp服务如何在不显示通知的情况下一直运行? - EsmaeelQash
我不熟悉那个特定的应用程序开发细节......但是,我相信您有几种方法可以避免通知(无需root手机):1-使用Alarm Manager和Intent Service;2-使用Google Cloud Messaging for Android。在这两种情况下,服务并不总是运行,但会在规律间隔(对于选项1)或需要时(对于选项2)唤醒。祝好! - Luis
我想让两个服务在前台运行。我该怎么做?http://stackoverflow.com/questions/35168209/are-their-any-negatives-impacts-of-launching-two-continues-services-at-the-same - Ruchir Baronia

0

我过去也遇到过同样的问题,你可能不想这样做,但对我来说确实有效。我设置了两个服务,一个主要工作程序和一个辅助程序。辅助程序会定期检查主程序是否在运行,而主程序则会确保辅助程序一直在运行。在这个例子中,如果其中一个被系统杀死,另一个将重新启动它。我从未遇到过它们同时死亡的情况。

再次说明,这是我的解决方案,可能不是你想要的。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接