每个应用程序运行在各自的进程中,应用程序的所有组件运行在此进程中。
安卓系统试图尽可能长的保持应用程序进程,内存回收时,根据进程内运行的组件及其状态,系统把每个进程都划入一个重要层次结构中,重要性低的进程先被清除,用于恢复系统资源。
- 前台进程:
- 可见进程
- 服务进程
- 后台进程
- 空进程
应用程序启动时,系统会创建一个名为main的主线程,UI线程,主要用于应用程序与UI交互。当用户触摸屏幕上的按钮时,应用程序的UI线程把触摸时间分发给widget,widget先把自己置为按下状态,再发送一个显示区域已失效的请求到事件队列中,UI线程从队列中取出此请求,并通知widget重绘自己。
android的UI组件包并非线程安全的,不允许从工作线程中操作UI,只能从UI线程中操作用户界面。
单线程须遵循的规则:
- 不要阻塞UI线程
- 不要在UI线程外访问UI组件包
从其他线程中访问UI线程:
- Activity.runOnUiThread(Runnable)
- View.post(Runnable)
- (long)View.postDelayed(Runnable,long)
- Handler
- AsyncTask:先阻塞工作线程,再在UI线程中呈现结果,此过程不需对线程和handler进行人工干预。主要把任务分为工作进程和UI进程内完成的部分。