网络通信

Service运行在后台

2016-04-24  本文已影响121人  shuixingge

简书参考资料1
知乎参考资料2
博客参考资料3
博客参考资料4
进程回收机制

App在退到后台时系统并不会真正的kill掉这个进程,而是将其缓存起来。打开的应用越多,后台缓存的进程也越多。在系统内存不足的情况下,系统开始依据自身的一套进程回收机制来判断要kill掉哪些进程,以腾出内存来供给需要的app。这套杀进程回收内存的机制就叫 Low Memory Killer

进程优先级

Paste_Image.png

前台进程:拥有与用户正在交互的Activity或者持有一个绑定到前台 Activity 的服务 ;系统内存不足,前台进程最后被杀掉。
可见进程:可以是处于暂停状态的Activity或者绑定在其上的Service,即被用户可见,但是由于失去了焦点,而不能与用户交互。
服务进程:如果不属于以上两种状态,其中运行着通过StartService启动的服务(started service),那么它被看作是一个服务进程。
后台进程:运行着调用了onStop的而停止的程序,这些进程会保留一段时间,直到更高优先级进程需要内存的时候才被回收。
空进程:不包含任何应用程序组件的进程,空进程是最低优先级的。

这些优先级是在进程的级别上,不是组件级别上

利用不同的App进程使用广播来进行相互唤醒。

Service设置成START_STICKY,kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样

通过 startForeground将进程设置为前台进程,做前台服务,优先级和前台应用一个级别​,除非在系统内存非常缺,否则此进程不会被 kill

双进程Service:让2个进程互相保护,其中一个Service被清理后,另外没被清理的进程可以立即重启进程

Android系统中当前进程(Process)fork出来的子进程,被系统认为是两个不同的进程。当父进程被杀死的时候,子进程仍然可以存活,并不受影响。鉴于目前提到的在Android-Service层做双守护都会失败,我们可以fork出c进程,多进程守护。死循环在那检查是否还存在;守护进程做的事情就是循环检查目标进程是否存在,不存在则启动它。

上一篇下一篇

猜你喜欢

热点阅读