1.了解Android消息处理机制
1.1关键名词
Message:消息的表示
MessageQueue:消息队列
Looper:消息循环,用于循环取出消息
Handler:消息处理,消息循环从消息队列中取出消息后要对消息进行处理
1.2参考:http://www.cnblogs.com/angeldevil/archive/2013/09/29/3340644.html
2.使用Android消息处理机制
参考:http://blog.youkuaiyun.com/toyuexinshangwan/article/details/8597237
3.Android消息处理机制实现同步效果
由于Android消息处理机制实际是采用异步实现的,如果实现同步效果,可以在工作线程中添加对消息队列的消息检查来判断信息是否已被处理,若未处理则不进行下一步操作,否则进行下一步操作。
4.源码
package com.example.handlertest;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
private int i = 0;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.tv);
new Thread(new MyThread()).start();
}
private Handler h = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
System.out.println("msg: " + i++);
tv.setText("i :" + i);
break;
default:
break;
}
};
};
class MyThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
//判断上次消息是否被处理完成
if(!h.hasMessages(0)){
System.out.println("thread: " + i++);
h.sendEmptyMessage(0);
}
}
}
}
}
5总结:handler可视为对消息的处理者,Looper是在子线程要创建该线程的消息队列,在主线程(UI线程)默认已创建消息队列。采用obtainMessage来获取Message,Message使用完后系统会调用recycle回收,比new Message方式节省内存。