1,ProgressDialog
> //使用对象 设置标题
progressDialog.setTitle("标题");
//设置图标
progressDialog.setIcon(R.drawable.ic_launcher);
//设置展示的内容
progressDialog.setMessage("正在下载请稍等....");
//设置样式
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//展示
progressDialog.show();
2,UI线程和工作线程
>Ui线程也是Main线程 负责会在UI界面和事件分发
俩个主要要素:
>1,在Ui线程不能做阻塞操作 (在主线程阻塞超过5s程序出错 "程序无反应")
>2,在主线程以外的线程(子线程)不能更新UI
3, 什么是异步任务
>在子线程做耗时操作 将结果回调到主线程
4, 为什么要使用异步任务
>1,在Ui线程不能做阻塞操作 (在主线程阻塞超过5s程序出错 "程序无反应") 4.0以后 不允许在主线程下载
>2,在主线程以外的线程(子线程)不能更新UI
* 1,创建一个类 继承AsyncTask,同时声明三个参数
* Params:子线程执行方法里参数类型
* Progress;子线程执行任务的进度类型 如果不想展示进度 Void
* Result:子线程执行任务的结果类型
*
* 2,实现核心方法
* doInBackground(String... params){}
*
* onPostExecute(byte[] result)
*
* 3,在主线程中执行异步请求
>完整的AsyncTask
public class MyAsyncTask extends AsyncTask<String, Integer, List<String>>{
/**
* 在首次执行异步任务时 调用此方法 做初始化操作
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
/**
* 在子线程中执行 做耗时操作
*/
@Override
protected List<String> doInBackground(String... params) {
// TODO Auto-generated method stub
//publishProgress(values)
return null;
}
/**
* 更新进度的方法 在doInBackground中 执行publishProgress(values) 将进度值发送给onProgressUpdate
*/
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
/**
* 在主线程中更新UI 在执行完doInBackground之后执行 onPostExecute
*/
@Override
protected void onPostExecute(List<String> result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
//点击其他按钮 取消AsyncTask时 执行此方法
@Override
protected void onCancelled(List<String> result) {
// TODO Auto-generated method stub
super.onCancelled(result);
}
}
5, 设置View的显示与隐藏
>visibility=""
>gone: 隐藏 不占空间
>visible 显示
>invisible 隐藏 占空间
>setVisibility()
>View.GONE
>View.VISIBLE
>View.INVISIBLE
6, AsyncTask注意事项:
>1,AsyncTask实例只能调用一次
>2,必须在Ui线程得到AsyncTask对象
>3,AsyncTask方法 系统自动调用
>4,数据进行交互(子线程和主线程交互)AsyncTask,否则开启一个线程就行
>5,异步任务必须在UI线程启动