android 进程优先级

一、android 进程的优先级

android 进程优先级_第1张图片

       1、前台进程(Foreground process)满足以下一个条件即可视为前台进程。

    •  该进程持有一个activity的生命周期已经走到了onResume()方法,但还没用调用onPause()。
    •  该进程持有的Service被一个Activity绑定,并且Activity正在与用户交互。
    •  该进程持有的Service调用了startForegroud()方法。
    •  该进程持有的Service正在执行生命周期方法(onCreate()、onStart()、onDestroy())。
    •  该进程持有一个正在执行onReceive()方法的BroadcastReceiver

          一般来说,在某种情况下,设备达到一个memory paging state, 为了使用户界面有响应,这时才需要终止这个前台进程。

      2、可见进程(Visible process)一个进程,没有任何前台components,但是仍然影响着屏幕的显示。

    • 该进程持有一个非前台的activity, 但是对用户仍然可视(onPause()方法已经被调用)
    • 这种情况发生,例如,如果一个前台的activity启动一个dialog(应该是包含在透明activity内的dialog),activity在dialog下面,并且可见。
    • 进程持有的Service绑定了一个可见的或前台的activity 

         一个可视进程被认为是重要的,一般不会被kill,除非kill它是为了保证前台进程的运行。

      3、服务进程(Service process)一个进程运行着service,service是调用startService()启动的,并且不属于上面两个高级分类的进程。

         虽然服务进程不会和用户看到的东西直接绑定在一起,但是它们一般都在做一些用户关心的事情,比如在后台播放音乐或者下载数据。所以只有在内存不足以使它和前台服务与后台服务一起运行时才会kill服务进程。  

     4、后台进程(Background process)一个进程持有一个不可见的activity(activity的onStop()方法被调用

         这些进程在用户体验上没有直接影响,系统可以随时kill掉回收内存,以保证前台进程、可见进程、服务进程的运行。

         通常有很多后台进程在运行,所以他们被保存在LRU列表中(最新最近被使用),内存足是优先kill长时间不使用的进程。

     5、空进程(Empty process)一个不持有任何活跃应用组件的进程。

         空进程的目的是为了缓存,为了减少下一次启动这个components的时间。 为了平衡系统缓存和底层内核缓之间的系统资源,系统总是会kill掉它。


     Android会根据这个进程上活跃的组件的重要性,把一个进程排在它能达到的最高的级别上。

     比如,如果一个进程持有一个service和一个可视activity,这个进程会被认为是一个可视进程,而不是一个服务进程

     除此之外,一个进程的排行有可能因为其他进程的依赖而增加。一个进程如果为其它进程服务,它的级别是不能低于它服务的进程的。 

     比如一个Content provider在进程A,服务着一个在进程B的客户,或者一个在进程A的service绑定在一个进程B上的组件,A总是会被认为至少和B进程一样重要的。   


本文参考:

http://developer.android.com/guide/components/processes-and-threads.html

https://www.cnblogs.com/baron89/p/3675737.html


你可能感兴趣的:(android,进程优先级)