Sla*_*zen 12 service android background-service
让我们来看看下一个场景:
static
在应用程序类中有一些变量,假设它是一个int i = 0;activity
,并service
从活动开始onCreate()
,服务获得START_STICKY
标志.service
都是使用TimerTask将当前秒写入应用程序类中的变量.我退出活动START_STICKY
标志而重启服务.现在我有问题:
谢谢,对不起我可怕的英语......
tl;博士:是的,这是可能的.但是,Service
必须从它自己的过程开始.
重要的是要意识到Android操作系统在内存不足时会杀死进程,而不是单个组件,例如Activities
或Services
(请参阅此答案).
鉴于上述陈述,很明显,只有当它们包含在单独的过程中时,Service
才能独立存在Application
.否则,当它们的过程被破坏时,它们将被一起销毁.
现在考虑单独进程的情况Service
和Application
现有情况.在Android中,进程在低内存情况下从最低优先级到最高优先级被破坏.优先顺序为:空<背景<服务<可见<前景(见此处).因此,您可能Application
会在您Service
活着期间被销毁(例如,如果您的应用程序在后台),Service
并且您的应用程序在您的应用程序保持活动状态时也可能会被销毁(应用程序位于前台).
您可以通过android:process
在组件清单标记中定义属性来声明应用程序的任何组件(Activity,Service,ContentProvider等)在其自己的进程中运行.
从流程的官方文档:
默认情况下,同一应用程序的所有组件都在同一进程中运行,大多数应用程序不应更改此设置.然而,[...]对于每种类型的构成要素的清单项- ,
Activity
,Service
,Receiver
和Provider
-支持一个android:process
能够指定在其中该组件应运行的处理属性.您可以设置此属性,以便每个组件在其自己的进程中运行,或者使某些组件共享进程,而其他组件则不共享.[...]该Application
元素还支持android:process属性,用于设置适用于所有组件的默认值.
这与问题1中的答案有关.
如果Service
存在于Application
与之相同的进程中,则它们将被销毁并一起重新启动.
如果Service
存在于一个单独的进程中,Application
则它们是完全独立的进程,因此将在Android OS认为合适的情况下相互独立地销毁和重新启动.
归档时间: |
|
查看次数: |
1517 次 |
最近记录: |