`
shuai1234
  • 浏览: 932575 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

关于Android里面的任务异步调用Handler的使用---可以解决耗时任务的后台运行

 
阅读更多

 

Handler 提供了异步处理任务的机制。在任务线程队列的对头获取执行任务,在任务队列线程的队伍放入任务线程。
线程队列  
消息队列


handler.post(Runnable thread)执行的任务是在主线程中执行的。并没有启动新的线程。只调用了线程的run方法,没有调用start方法。


一:线程队列处理:
是一个任务线程的执行队列。
//handler接收到任务线程,放到任务队列里面派对执行。
//调用该任务线程的run() 方法执行任务线程。
Handler updateBarHandler =new handler();
handler.post(Runnable Thread);

//移除handler里的任务线程,调用线程的stop()方法,销毁线程。
handler.removecallbacks(Runnable Thread);


二:消息队列处理
1.定义Handler的接收消息监听方法
Handler updateBarHandler =new handler(){
//覆写handleMessage方法,用于接受消息队列的信息
@Override
public void handleMessage(Message msg){
bar.setProgress(msg.arg1);
updateBarHandler.post(Runnable thread);
}
}


2.发送消息sendMessage arg1 arg2
//获取handler的消息对象,方法是有Android操作系统提供的。消耗比较小。
Message msg=updateBarHandler.obtainMessage();
//用msg对象的arg参数设置值,来传递信息。
//msg.obj=obj 传送一个对象
//msg.setDate(Bundle bundle); 传送大的数据对象   Bundle的是Key值固定的映射表。

 

一下是用handler完成的进度条处理的代码片段:

1.定义handler
Handler updateBarHandler =new handler(){
//覆写handleMessage方法,用于接受消息队列的信息
@Override
public void handleMessage(Message msg){
bar.setProgress(msg.arg1);
updateBarHandler.post(Runnable thread);
}
}


2定义线程任务:

Runnable updateThread =new Runnable(){
int i=0;

@Override public void run(){
i=i+10;//进度条每次前进是各单位
Message msg=updateBarHandler.obtainMessage();
msg.arg1=i;
try{
Thread.sleep(1000);
}catch(){
;}
updatebarhandler.sendMessage(msg);
if(i==100)//进度条的默认值是100
updateBarhandler.removeCallbacks(updateThread);


}

}

 

HandlerThread 可以实现另起一个线程去做任务

//实现了使用Looper来处理消息队列的功能。由android的操作系统提供。可以循环调用的任务。
Oncreate(){

Handlerthread handlerThread =new HandlerThread("thread_name")
handlerThread.start();//来启动一个新的线程。
Myhandler myHandler=new Myhandler(handlerThread.getLooper);//是该handler运行时可以搭载在已经启动的线程之上。

//将msg发送到生成该msg的目标对象handler中,会触发该对象的handlerMessage()方法。
Message msg=myhandler.obtainMessage();
msg.sendTotarget();

}


//自定义handler类
class Myhandler extends handler{

public Myhandler(){
}
public Myhandler(Looper looper){
super(looper);
}
@Override
public void handlerMessage(Message msg){
System.out.println("handler--->"+Thread.currentThread.getId());
}


}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics