Android:单例实例与服务

sd3*_*n90 2 android android-service

在这里,我想问一个基本的问题,我在做代码时找不到答案。

据我了解,在应用程序onCreate()中创建单例实例的脆弱性低于android服务。在我的应用程序中,我想收听位置更新,该位置更新的可能性较小。如果我保留服务,它可能会在内存不足的情况下被杀死,但是仍然可以在后台运行该应用程序,从而保留实例。因此,我想使用单例实例而不是服务。

这是正确的方法吗?

Dav*_*ser 5

Android可以(并且将)在资源不足的情况下终止后台进程,有时甚至是因为它​​想这么做(尤其是在低端设备上,以节省电池和内存资源)。它通过杀死托管应用程序的OS进程来实现。在这种情况下,您的应用将不再在后台运行,因此您可能在其中创建的任何单例Application.onCreate()也将消失。

Android对您的单例一无所知,因此没有理由还原它。

但是,如果您创建了Service并从Service返回,则告诉Android您希望一直保持运行状态(如果可能)。在这种情况下,如果Android (由于资源限制或仅出于其意愿)终止了托管您的OS进程,则Android将自动重启您的(因为Android知道您并知道它希望一直运行)。这是执行此操作的正确方法。START_STICKYonStartCommand()ServiceServiceServiceService

注意:有些设备(特别是中国设备,例如小米,华为,LG,联想等)不会自动重启STICKY服务。这些设备维护允许在后台运行的“受保护的应用程序”或“特权的应用程序”列表,Android只会针对此列表中的应用程序重新启动STICKY服务。您将需要让用户手动将您的应用程序添加到此列表中。无法以编程方式将您的应用程序添加到这些设备上的此列表中。

参见/sf/answers/2948419421//sf/answers/2895832271/