Android 没有主应用程序,后台服务能否存在?
让我们检查下一个场景:Android 没有主应用程序,后台服务能否存在?,android,service,background-service,Android,Service,Background Service,让我们检查下一个场景: 我创建了一个新的android应用程序,包括应用程序类、活动和后台服务 我在应用程序类中有一些静态变量,假设它是一个int I=0 我启动活动,并从活动的onCreate()启动服务,该服务将获得启动标志 此服务所做的一切就是使用TimerTask将当前秒写入应用程序类中的变量。 5.我退出活动 一段时间后,Android将关闭服务和应用程序(假设设备资源不足),并由于START\u STICKY标志重新启动服务 现在我要回答以下问题: 是指操作系统杀死应用程序,但不杀死
静态
变量,假设它是一个int I=0李>
活动
,并从活动的onCreate()
启动服务
,该服务将获得启动标志
服务所做的一切就是使用TimerTask将当前秒写入应用程序类中的变量。
5.我退出活动
START\u STICKY
标志重新启动服务我不确定这一点,但我认为没有,因为没有应用程序引用,服务可以生存托默·莫尔的回答是不正确的 当您的
应用程序
死亡时,您的服务也将死亡
只有在应用程序
之后,才会创建服务。
您可以通过记录他们的onCreate()
1来观察自己。是否存在这样的情况:操作系统杀死应用程序,但不杀死服务?
tl;dr:是的,这是可能的。但是,服务必须在自己的流程中启动
解释:
必须认识到,Android操作系统在内存不足时会杀死进程,而不是单个组件,例如活动或服务()
鉴于上述陈述,很明显,服务
可以独立于应用程序
而存在,前提是它们包含在单独的进程中。否则,当进程被破坏时,它们将一起被破坏
现在考虑在分离过程中存在的“代码>服务< /代码>和<代码>应用程序>代码>。在Android中,进程在低内存情况下从最低优先级到最高优先级被破坏。优先级顺序为:空()。因此,您的应用程序
可能会在服务
保持活动状态时被销毁(例如,如果您的应用程序位于后台),您的服务
也可能在应用程序保持活动状态时被销毁(应用程序位于前台)
通过在components manifest标记中定义属性,可以声明应用程序的任何组件(活动、服务、ContentProvider等)以在其自己的进程中运行
从官方文件:
默认情况下,同一应用程序的所有组件都在同一进程中运行,大多数应用程序不应更改此设置。但是,[…]每种类型的组件元素的清单条目-活动
、服务
、接收者
和提供者
-支持一个android:process
属性,该属性可以指定该组件应该在其中运行的进程。您可以设置此属性,使每个组件在其自己的进程中运行,或者使某些组件共享一个进程,而其他组件则不共享。[…]元素还支持android:process属性,以设置应用于所有组件的默认值
2。当系统重新启动服务时,应用程序是否也会重新启动?
这与问题1中的答案有关
如果服务
与应用程序
存在于同一进程中,则它们都将被销毁并一起重新启动
如果服务
作为应用程序
存在于一个单独的进程中,那么它们是完全独立的进程,因此将被销毁,并在Android操作系统认为合适时独立重新启动