为什么使用线程更新?
在Android开发过程中,如果,在主线程中使用耗时操作,Adnroid会时程序进入无响应状态,故此,耗时操作,必须通过子线程实现。
Therad 实现子线程刷新
- 建立一个类,继承Therad实现子线程刷新
class Mythread extends Thread{
public void run(){
String str="我是通过Handler,被发送的数据"; //被更新的数据
// 创建Message 对象,
Message msg=new Message();
msg.obj=str;
//发送消息
handler.sendMessage(msg);
}
}
2.建立Handler 进行循环接受子线程传递过来的值,并且更新UI
//判断当前函数是否被主线程调用的方式
Looper.getMainLooper() //当前主线程运行的Looper
Looper.myLooper(); Looper 循环接受消息的
boolean result=Looper.getMainLooper()==Looper.myLooper();
//Handler 接受消息
Handler handler=new Handler(){
//处理消息(被主线程执行)
public void handlerMessage(Message msg){
//接受通过Message 和Handler 传递过来的值
String str=(String)msg.obj;
}
}
AsyncTask 异步任务,优化后的Handler,它封装了Handler的方法
简介:AsyncTask 是产生一个线程池,当你使用完一个线程后,它回到线程池
- 继承AsyncTask
class MyAsycTask extends AsyncTask { /** * 被主线程执行,在doInBackground() 函数之前执行 */ @Override protected void onPreExecute() { super.onPreExecute(); //可以用来,执行一些,提示 } /** * 被子线程执行,用来处理耗时操作 */ @Override protected Object doInBackground(Object[] params) { //推送数据,类型Object 支持任何数据类型 publishProgress(); return null; } /** * 推送的数据,是被推送到,本方法中 */ @Override protected void onProgressUpdate(Object[] values) { //super.onProgressUpdate(values); } /** * 被主线程执行,在doInBackground() 函数之后执行 */ @Override protected void onPostExecute(Object o) { //super.onPostExecute(o); //更新UI } } }
MyAsycTask myAsycTask=new MyAsycTask();
myAsycTask.execute(); 调用