Android中进程生命周期的优先级

 更新时间:2016年01月17日 09:54:27   投稿:hebedich  
这篇文章主要介绍了Android中进程生命周期的优先级的相关资料,需要的朋友可以参考下

学习Android最好的途径当然是强大的官方文档了,其中在Processes and Threads一节中对于进程生命周期淘汰优先级,有着详细的介绍。就不给大家转帖了,直接放译文吧,如下:

Android系统会尽量维持进程的存在,但毕竟资源有限,当系统资源告急的时候会淘汰一部分进程。淘汰顺序的凭据就是系统进程的优先级了,优先级越高越不容易被杀死,反之亦然。系统总共为进程分了五个优先级,如下

一、前台进程(进程满足如下任一条件即为前台进程):

1. 拥有 一个执行了onresume方法正在与用户交互(获得焦点)的Activity
2. 拥有一个service,这个Service跟正在与用户交互的Activity进行了绑定
3. 拥有一个Service,这个Service调用了startForeground()方法
4. 拥有一个正在执行onCreate()、onStart()或者onDestroy()方法中的任意一个的Service
5. 拥有一个正在执行onReceive方法的BroadcastReceiver

二、可见进程:

1. 拥有一个执行了onPause方法,但仍然可见的Activity
2. 拥有一个Service,这个Service跟一个可见的或前台的Activity绑定了

三、服务进程:

拥有一个通过startService方法启动的Service的进程

四、后台进程:

拥有一个后台Activity(onStop方法被调用)的进程

五、空进程:

没有拥有任何活动的应用组件的进程,也就是没有任何Service和Activity在运行

另外,还有一些需要补充的,当一个进程满足多个进程条件时,当然是取优先级更高的为准,比如一个进程同时满足前台进程和服务进程的条件,这个进程就是个前台进程,这点很好理解。另外,进程的优先级也不是一成不变的,而且有时候会随着一些相关的因素而发生改变;比如,某进程A满足前台进程的第二个条件,进程A拥有一个service,这个Service跟正在与用户交互的Activity进行了绑定;当这个Activity变成可见状态了,进程A便不再满足前台进程的条件,进而因满足可见进程的第二个条件,进程A变成了可见进程。总之,在掌握了基本概念之后,需要细心的分析具体的情况,方能得出正确的判断。

进程优先级的额外说明

1. 系统会赋予进程尽可能高的优先级. 例如一个进程既包含已启动的service, 也包含前台activity, 则这个进程会被视为前台进程.

2. 由于组件之间的依赖性, 进程的优先级有可能被提高. 假如进程A服务于进程B, 则进程A的优先级不能低于进程B. 比如, 进程A的ContentProvider组件正在服务于进程B的某个组件, 或者进程A的service组件和进程B的某个组件绑定等, 这些情况下, 进程A的优先级都不会低于进程B(如果按照优先级规则, 进程A的优先级确实低于进程B, 则系统会选择提高进程A的优先级到和进程B相同).

3. 由于服务进程的优先级高于后台进程, 因此如果activity需要执行耗时操作, 最好还是启动一个service来完成. 当然, 在activity中启动子线程完成耗时操作也可以, 但是这样做的缺点在于, 一旦activity不再可见, activity所在的进程成为后台进程, 而内存不足时后台进程随时都有可能被系统杀死(但是启动service完成耗时操作会带来数据交互的问题, 比如耗时操作需要实时更新UI控件的状态的话, service就不是一个好的选择). 基于同样的考虑, 在BroadcastReceiver中也不应该执行耗时操作, 而应该启动service来完成(当然, BroadcastReceiver的生命周期过于短暂, 也决定了不能在其中执行耗时操作).

相关文章

  • 详解Android Studio中Git的配置及协同开发

    详解Android Studio中Git的配置及协同开发

    这篇文章主要介绍了详解Android Studio中Git的配置及协同开发,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Android开发中播放声音的两种方法分析

    Android开发中播放声音的两种方法分析

    这篇文章主要介绍了Android开发中播放声音的两种方法,结合实例形式简单分析了Android音频播放的常用函数、使用方法及相关注意事项,需要的朋友可以参考下
    2017-09-09
  • Android使用剪切板传递数据

    Android使用剪切板传递数据

    这篇文章主要为大家详细介绍了Android使用剪切板传递数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Android栗子の图片验证码生成实例代码

    Android栗子の图片验证码生成实例代码

    这篇文章主要介绍了Android栗子の图片验证码生成实例代码,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-12-12
  • Android服务Service教程

    Android服务Service教程

    Android的服务是开发Android应用程序的重要组成部分。不同于活动Activity,服务是在后台运行,服务没有接口,生命周期也与活动Activity非常不同。通过使用服务我们可以实现一些后台操作,比如想从远程服务器加载一个网页等,下面来看看详细内容,需要的朋友可以参考下
    2021-11-11
  • Android TextView高级显示技巧实例小结

    Android TextView高级显示技巧实例小结

    这篇文章主要介绍了Android TextView高级显示技巧,结合实例形式总结分析了Android TextView控件进行文字与图片显示的相关操作技巧,需要的朋友可以参考下
    2016-10-10
  • Android自定义输入法软键盘

    Android自定义输入法软键盘

    这篇文章主要为大家详细介绍了Android自定义输入法软键盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • Android双击事件拦截方法

    Android双击事件拦截方法

    下面小编就为大家分享一篇Android双击事件拦截方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Android7.0以上Uri转路径的方法实现(已验证)

    Android7.0以上Uri转路径的方法实现(已验证)

    这篇文章主要介绍了Android7.0以上Uri转路径的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Android GridView添加头部问题的解决

    Android GridView添加头部问题的解决

    这篇文章主要介绍了Android GridView添加头部问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论