AsyncTask 实现主要
方法1 :doInBackground 这是自动生成的,这个方法执行异步任务运行在子线程中
方法2:onProgressUpdate (这个需要自己写)这个就是进度条,要做进度条的话还得加个 onPreExecute 方法,这个是第一执行,在doInBackground前面调用(这个不怎么重要,就不写了,可以上网看那些大牛写的)
方法3:onPostExecute (这个也需要自己写)这个就是主线程。里面做UI更新,这个方法在主线程执行,doInBackground任务执行的结果作为这个方法的参数返回
其中1,3是必须写的,进度条 的话要搭配onPreExecute。下面就是代码
private void getDatas(String path) {
private String s;
//onPostExecute这个方法需要自己写,相当于handler RunOnUIThread,更新UI界面
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//用gson解析网上的json串,需要导入gson依赖,这个是我用的json串,自己看情况修改
DateBean dateBean = gson.fromJson(s, DateBean.class);
List<DateBean.ItemListBeanX.DataBeanX.ItemListBean> itemList1 = dateBean.getItemList().get(0).getData().getItemList();
myAdapter adapter = new myAdapter(itemList1);
listView.setAdapter(adapter);
}
//就是子线程,用来做耗时操作的
protected String doInBackground(String... strings) {
try {
String string = strings[0];
URL url = new URL(string);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);connection.setReadTimeout(5000);
int code = connection.getResponseCode();
if (code==HttpURLConnection.HTTP_OK){
InputStream is = connection.getInputStream();
s = StreamTools.readFromFile(is); //StreamTools工具类,可以看我另外一个
return s;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(path); //这个很关键,execute就是告诉 AsyncTask开始执行了,启动了。 一定要写
}
这个就是简单点的AsyncTask 了,不过要注意:
优缺点很明显,优点就是简单快捷,缺点就是当有多个异步操作时,就变得复杂起来,而且AsyncTask在更新UI时,特别是大量的数据时候,放弃吧。