Android系统会为应用创建一个main进程,程序的所有组件都运行在这个进程里
Andoid的单线程模式必须遵守两个规则:
1.不要阻塞UI线程。
2.不要在UI线程之外访问Andoid的UI组件包。
为了能够在其他线程中方为UI线程,Android提供了几种方法:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
(long)View.postDelayed(Runnable , long)
然而这几种方法都有其局限性,对于更复杂的逻辑可能就无能为力了。
所以需要引入Handler机制来处理UI线程分发过来的消息。
Android还提供了一个异步任务类AsyncTask,这个类在内部封装了Handler。事实上整个Android上Handler是无处不在的。
AsyncTask的工作方式概述:
- 可以用generics来指定参数、进度值和任务最终值的类型。
- 工作线程中的doInBackground()方法会自动执行。
- onPreExecute()、onPostExecute()和onProgressUpdate()方法都在UI线程中调用。
- doInBackground()的返回值会传给onPostExecute()。
- 在doInBackground()内的任何时刻,都可以调用publishProgress()来执行UI线程中的onProgressUpdate()。
- 可以在任何时刻、任何线程内取消任务。