Android学习笔记(6)————Android的线程与进程
/********************************************************************************************
*
author:conowen@大
钟
* E-mail:conowen@hotmail.com
* http://blog.csdn.net/conowen
* 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。
********************************************************************************************/
1、Android系统的进程(Processes)与线程(Thread):
1.1、进程与线程简述
当一个Android应用程序启动时,系统会启动一个Linux进程,并在此进程中,开启一个称为“main”的线程,也就是常说的主线程。主线程主管向
用户界面控件派发事件。其中包含绘图事件。它也是你的应用与界面工具包(android.widget和android.view包中的组件)交互的地
方,于是main线程也被称为(UI)界面线程,所以整个线程一般不能阻塞。
一般情况下,应用程序的组件都运行在这个Linux进程里面,但是也可以安排到其他进程里面运行。只要修改AndroidManifest文件,就可以安排应用程序组件运行在哪个进程里面了。
组件元素有如下几种:
<activity>、<service>、 <receiver>与<provider>
它们都有一个process属性的,可以设定为相对应的进程里面。
另外<application>也有一个process属性,可以设定这个application里面的所有组件运行在哪个进程里面。
默认情况下,这些组件都是在主线程里面的,Android系统不会为每一个组件创建一个线程。
- <application
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name" >
- <activity
- android:label="@string/app_name"
- android:name=".TimerActivity" >
- <intent-filter >
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
总的来说,一般的application都是运行在同一个进程里面,而且所有的组件都在主线程里面。
1.2、Android系统自动关闭进程机制
但是有时候开始一些比较费时的程序。也就是说某些组件被系统调用了,但是长时间没有响应(超过5秒),导致主线程阻塞,后续组件不能执行。Android 系统就会自动地把整个进程都给杀掉了。因此,我们需要在进程里面新开线程,让一些比较费时的组件运行在其他线程里面。这样就可以让主线程畅通,而不至于让 Android系统关闭掉应用程序的进程。(没有自动关闭线程之说)
除此之外,Android系统也会自动地关闭一些其他的进程,在以下情况下进程可能会被关闭。
系统可用内存不足,同时又有一个正在为用户进行服务的进程需要更多内存的时候,Android可能会关闭一个进程。同时地,这个进程中运行着的应用程序也 因此被杀掉了。当系统再次需要它们进行处理时,Android系统会为这些组件重新创建进程。至于Android会自动关闭哪个进程,就要看 Android系统的定义了。
2、进程与线程的区别
(1)线程是进程内的一个执行单元,进程至少有一个线程。
(2)同一个进程内,线程共享进程的地址空间,而进程有自己独立的地址空间。
(3)线程是处理器调度的基本单位,但进程不是。
(4)二者均可并发执行。
转自:http://blog.csdn.net/conowen/article/details/7276848