关于handler和异步任务
handler使用流程概要
首先在主线程新建一个handler实例,重写onhandlemessage(Message msg) 方法,对传过来的message进行处理
然后在子线程中完成操作,操作完成后新建一个message对象,调用handler实例的sendmessage方法,将message传给消息队列,再由Looper分发给handler
异步任务使用流程
新建一个类,继承 AsyncTask<Void,Integer,Integer>,三个泛型分别是传入参数类型,进度类型,结果类型
在这个类里面主要重写几个方法
protected void onPreExecute() 在doinbackground之前调用,做准备工作,在子线程运行
protected Integer doInBackground(Void... params) 具体的子线程操作
在这个方法里可以用publishProgress()方法来更新进度
protected void onProgressUpdate(Integer... values)更新进度,运行在UI线程
protected void onPostExecute(Integer integer) doinbackground执行完毕后执行,运行在UI线程
要使用这个类,新建一个实例,然后调用该实例的excute()方法即可。
关于这二者的区别,handler比较容易对子线程的过程进行精确控制,但是代码繁琐,不简洁
Asynctask代码简洁,但是操作不精细
网上有人说asynctask比handler轻量级,其实不准确,因为asynctask内部还包含了一个线程池的处理,其实是比handler更重量级的,只是代码看起来更简洁,所以说是轻量级的