一、异步消息处理机制的实现(小白)
牵涉到四个对象:handler、message、messagequeue、looper。
1、handler: 字面意思,就是处理者的意思。处理有两层进行处理说:
1.1将message发送出去;
1.2将message接收并处理。
2、message:表示携带的信息。包含一些信息参数:包括:what字段、arg1、arg2、obj对象。
3、messagequeue:消息队列。
4、looper:循环器。
处理流程: 由handler发送一个携带信息的message消息;主线程
该message发送后进入messagequeue消息队列;子线程?
由looper控制从messagequeue队列中取出等待处理的message;子线程
handler对第三步取出的message进行处理。主线程?
存在问题:
第二部是否在子线程中实现?最后一步的处理是否在主线程?
二、Android封装的AsyncTask异步任务类(小白)
AsyncTask是一个抽象类,也就是说不能直接通过创建对象进行访问,只能通过继承的方式。
在进行继承的时候,需要传入的三个参数,仅仅是参数而不是类型:
1.Params(执行任务需要传入的参数
2.Progerss(如果执行任务时需要显示进度)
3.Result(执行完毕,对结果的返回)
具体参数需要根据任务的需求进行。
主要需要重写的四个方法:onPreExecute: 执行任务前执行
doInBackground: (Params)子线程耗时任务
onProgressUpdate: (Progress)执行UI进度更新
onPostExcute: (Result)执行完毕后调用
子线程的进度参数通过publicProgress()传给主线程。
任务的开启:new AsyncTask.execute。