Process and Threds(进程与线程)

当应用程序组件启动和应用程序没有任何其他组件运行时,安卓系统启动了一个新的应用程序的一个新的应用程序线程的执行程序。默认情况下,同一个应用程序的所有组件都在同一个进程和线程中运行(称为“主线程”)。如果一个应用程序组件启动并且已经存在一个应用程序的进程(因为应用程序的另一个组件存在),那么这个组件就开始在这个过程中,并使用相同的执行线程然而(都在主线程中运行),您可以为应用程序中的不同组件设置运行在不同的进程中,并且可以为任何进程创建额外的线程(子线程)。


Process lifecycle(进程的生命周期)

重要性等级中有五个层次。下面的列表介绍了不同类型的进程,以重要性的顺序(第一个进程是最重要的,最后是被杀的):

Foreground process(前台进程):

用户当前正在做的一个过程。如果下列条件中的任何一个都是真的,一个进程被认为是在前台:
◦It hosts an Activity that the user is interacting with (the Activity’s onResume() method has been called). (相当于Activity的OnOnResume()执行
◦It hosts a Service that’s bound to the activity that the user is interacting with.(当一个service与一个正在和用户交互的Activity绑定的时候)

◦It hosts a Service that’s running “in the foreground”—the service has called startForeground().
◦It hosts a Service that’s executing one of its lifecycle callbacks (onCreate(), onStart(), or onDestroy()).
◦It hosts a BroadcastReceiver that’s executing its onReceive() method


2.visible process(可视进程)

一个没有任何前台组件的过程,但仍然可以影响用户在屏幕上看到的东西。一个过程被认为是可见的,如果任何一个以下的条件是真的:
- 一个Activity没有与用户进行交互,但仍然对用户可见的(相当于Activity onpause()方法被调用)。


3.Service process(服务进程)

一个进程正在运行一个服务,相当于on start()方法被执行,虽然用户不能直接看到服务,但是他总是影响用户关心的一些事情(比如音乐播放器,下载数据等)。所以系统保持它们运行,除非没有足够的内存来保留他们,以及所有的前台进程和可视进程。


4.Background process(后台进程)

一个进程拥有一个Activity的当前用户不可见(活动的onstop()方法被调用)。这些过程对用户体验没有直接的影响,系统可以在任何时候杀死他们,以回收前台,可视或服务进程中的内存。通常有许多后台进程在运行,所以他们被保存在一个LRU(最近最少使用)列表以确保与活动,最近被用户看到的过程,最后被杀。


5.Empty process(空进程)

一个不拥有任何活动应用程序组件的过程。保持这种过程活着的唯一原因是用于缓存的目的,以提高启动时间,下一次一个组件需要在它运行。该系统经常杀死这些过程,以平衡进程高速缓存和底层内核缓存之间的整体系统资源。


上山的人永远不要瞧不起下山的人,因为他曾经风光过,你还在山下呢;山上的人永远不要瞧不起山下的人,因为不定什么时候山下的人会爬上来,一定要做好自己,不要管东西南北风 ——无名