Android线程使用规定:
1、子线程不能操作UI组件(UI组件的方法都是不同步的)(注意:如果子线程在UI线程初始化的时候就执行完成,那么就不会引发异常)
2、Android4.0之后规定不能再UI线程中进行网络数据交互并且耗时操作应该在子线程中完成
AsyncTask异步任务类:
1、抽象泛型类--
在使用的时候必须指明具体的类型AsyncTask<Params,Progress,Result>
泛型说明:
Params :第一个泛型,一般是请求的URL或String
Progress: 第二个,更新进度,常用类型是Integer
Result :第三个,下载线程执行完后返回的结果,常用Bitmap,byte[],String
使用步骤:
1、自定义异步任务类并指明泛型
2、重写方法
Result doInBackground(Params... params) 后台执行的任务
onPostExecute(Result result) 任务完成,UI主线程执行
3、有选择的重写以下方法
onPreExecute() 后台任务开始之前的准备工作,UI主线程执行
onProgressUpdate(Progress... values) 当前执行的进度,UI主线程执行
onCancelled(Result result) 取消任务时,任务已完成的情况
onCancelled() 取消任务,任务正在执行的情况
4、在UI线程中创建自定义异步任务类对象,并execute执行
异步任务方法说明:
1.onPreExecute() 运行在UI线程中在AsyncTask执行前执行的准备方法
2.doInBackground() 运行在工作线程中进行耗时操作的方法
参数的类型与AsyncTask泛型的第一个参数类型一致 可变参数
返回值与AsyncTask泛型的第三个参数类型一致 返回工作线程耗时操作的结果
publishProgress(progress);//通知主线程修改当前进度
3.onProgressUpdate() 运行在主线程中用来更新进度的方法
只要doInBackground()中调用了publishProgress(progress);就立即执行该方法
该方法的参数与AsyncTask中泛型的第二个参数类型一致 可变参数
4.onPostExecute() 运行在主线程中用来将耗时操作的结果显示到ui界面中
参数是与AsyncTask的泛型的第三个参数类型一致
1、获取JSON格式的字符串显示在TextView中
2、将对应的字符串解析,将解析结果通过适配器设置给Spinner
3、当前页面增加一个按钮用于跳转到另外页面(跳转的时候要求取消异步任务)
4、另外页面异步任务加载图片
1、使用异步任务加载图片
2、使用异步任务加载并解析JSON
3、使用异步任务加载并解析XML数据
转载请注明原文地址: https://ju.6miu.com/read-675097.html