AsyncTask和Handler对比java
1 ) AsyncTask实现的原理,和适用的优缺点android
AsyncTask,是android提供的轻量级的异步类,能够直接继承AsyncTask,在类中实现异步操做,并提供接口反馈当前异步执行的程度(能够经过接口实现UI进度更新),最后反馈执行的结果给UI主线程.异步
使用的优势:ide
l 简单,快捷oop
l 过程可控spa
使用的缺点:线程
l 在使用多个异步操做和并须要进行Ui变动时,就变得复杂起来.code
2 )Handler异步实现的原理和适用的优缺点对象
在Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)àthread(子线程)运行并生成Message-àLooper获取Message并传递给HandleràHandler逐个获取Looper中的Message,并进行UI变动。继承
使用的优势:
l 结构清晰,功能定义明确
l 对于多个后台任务时,简单,清晰
使用的缺点:
l 在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)
Android为了下降这个开发难度,提供了AsyncTask。AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务。
AsyncTask直接继承于Object类,位置为android.os.AsyncTask。要使用AsyncTask工做咱们要提供三个泛型参数,并重载几个方法(至少重载一个)。
AsyncTask定义了三种泛型类型 Params,Progress和Result。
使用过AsyncTask 的同窗都知道一个异步加载数据最少要重写如下这两个方法:
有必要的话你还得重写如下这三个方法,但不是必须的:
使用AsyncTask类,如下是几条必须遵照的准则:
new AsyncTask<Void, Void, Void>() { //刷新过程当中须要作的操做在这里 protected Void doInBackground(Void... params) { try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } data.add("new item"); return null; } //刷新完成后要通知listview进行界面调整 @Override protected void onPostExecute(Void result) { adapter.notifyDataSetChanged(); listView.onRefreshComplete(); } }.execute(null);