今天我们来讲讲Android的处理机制Handle,跟之前一样,只入门,不深入。
Handle能做些什么呢?
1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器。
2)线程间通信。在Android的应用启动时,会 创建一个主线程,主线程会创建一个消息队列来处理各种消息。
下面我们用更新ui线程的案例来讲述Handle的用法
首先要新建一个Handle并实现handleMessage方法
贴代码
public class MainActivity extends AppCompatActivity {
private Button button;
private ProgressBar progressBar;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//根据message中的what值来判断是那个线程发过来的消息
switch (msg.what){
case 1:
//对progressbar进行更新,效果直接显示在ui上
progressBar.setProgress(msg.arg1);
break;
case 2:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)this.findViewById(R.id.handle);
progressBar = (ProgressBar)this.findViewById(R.id.progressbar);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建一个线程,并在线程中发送消息给handle,然后统一由handle进行处理
new Thread(new Runnable() {
@Override
public void run() {
for(int j=1;j<=100;j++) {
/*
创建Message,Message中有三个参数
what:用来表示消息的标识
arg1:用来传参数
arg2:用来传参数
*/
Message msg = new Message();
msg.what=1;
msg.arg1 = j;
try {
Thread.sleep(1000);
handler.sendMessage(msg);//把Message发送给Handle
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
});
}
}
初学入门者,就到这里啦,关于这个机制中 的角色,大家可以稍微了解一下,主要有四大角色:
Message:消息队列,用来存放线程放入的消息
Handle:用来接收和发送Message(消息)
Loop:接收Handle中发送的消息,并处理
线程:各种线程
整个机制的运行机制是:
由线程通过 sendHandle() 将线程中创建的Message发送给Handle,Handle接收到各种线程发送来的消息进行统一处理,由Handle统一处理。
Handle将消息发送给Message Queue,进行处理。
基本的就到这里啦。想更深入我这地小,哈哈,晚安!
鄙人小小白,多多光照!