AsyncTask 异步任务 + ProgressDialog 进度条对话框

一, 什么是异步任务


    使用子线程执行耗时的操作, 然后通过回调把结果返回给主线程




二, 为什么要使用异步任务


1, android 使用线程的规则:


1.1  主线程(UI线程)不能被阻塞, 不能执行耗时的操作


1.2  子线程(非UI线程)可以执行耗时的操作, 它不能操作UI线程


2, Handler是线程间的通信, 将子线程的数据传递给主线程显示


  Android已经实现了这种线程间的通信, 这个类就是AsyncTask








三, 如何使用异步任务


1, 定义一个类,继承AsyncTask, 同时声明3个泛型


public class MyTask extends AsyncTask<Params,Progress,Result>


没有返回类型: Void


第一个泛型:   子线程执行任务的请求参数类型


第二个泛型:   子线程执行任务的进度


第三个泛型:   子线程执行任务的结果返回类型


2, 重写核心的方法(4个)


//运行在主线程中, 负责初始化的工作(进度条对话框的初始)
protected void onPreExecute()


//运行在子线程中,执行耗时的操作
protected byte[]  doInBackground(String... Params)
{
//将当前的下载进度发布到ui线程中, 执行此方法后, 系统自动调用onProgressUpdate
publishProgress(int progress);
}


//运行在主线程中, 实时更新进度条
protected void onProgressUpdate(Integer... values)




//运行在主线程中, 更新UI (在doInBackground()方法执行后, 由系统自动调用)
protected void onPostExecute(byte[] result)




3, 启动异步任务(必须在主线程中启动)


new MyTask().execte(String... Params);


4, 在主线程中取消异步任务


myTask.cancel(true);






四, ProgressDialog  进度条对话框


包含了ProgressBar的对话框


有两种展示方式:  模糊的, 精确的


ProgressDialog pd = new ProgressDialog();


pd.setIcon(R.drawable.f001);


pd.setTitle("设置标题");


pd.setMessage("设置内容");


pd.setCancelable(true/false);//设置是否可撤销,默认为true 可撤销的


pd.show();//显示对话框  (加载数据之前)


pd.dismiss();// 对话框消失 (加载数据结束)





五, 设置控件是否可见


1, 属性
android:visibility = ""


属性值:  visible  可见
 
invisible  不可见(控件看不见, 但是位置依然占用)


gone       不可见(不占用当前位置)


2, 代码


progressBar.setVisibility(View.GONE);


View.VISIBLE


View.INVISIBLE


View.GONE
进度条类型 在xml中 写style?Android




六  AsyncTask注意事项


1,  必须在UI线程中得到AsyncTask的对象


2,  必须在UI线程中启动异步任务


3,  重新父类的4个核心方法, 这些方法都是系统自动调用, 不需要手动调用


4,  每个AsyncTask 的实例只能被使用一次, 不能重复使用,否则会抛出异常


5,  如果异步任务获取的数据需要和用户交互, 则使用, 否则开启线程
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值