美文网首页网络通信
Service运行在后台

Service运行在后台

作者: shuixingge | 来源:发表于2016-04-24 22:38 被阅读121次

    简书参考资料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进程,多进程守护。死循环在那检查是否还存在;守护进程做的事情就是循环检查目标进程是否存在,不存在则启动它。

    相关文章

      网友评论

        本文标题:Service运行在后台

        本文链接:https://www.haomeiwen.com/subject/wavfrttx.html