关闭

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

538人阅读 评论(0) 收藏 举报
分类:
一, 什么是异步任务


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




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


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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:35536次
    • 积分:1688
    • 等级:
    • 排名:千里之外
    • 原创:133篇
    • 转载:26篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论