Handler机制是什么
Handler机制主要应用于线程之间的通信。
在安卓中,只有UI线程(主线程)才能更新界面。像联网这样耗时间的操作,如果把这种操作放在主线程中运行,就可能造成界面卡顿的情况,所以这种操作一般都是在WorkThread(工作线程)中执行的。如果说我的WorkThead执行完成后得到了一个数据,需要把这个数据更新到UI界面上,这个时候就需要用到Handler了。
与Handler相关的类以及Handler类的简单介绍
Mesage
意思是消息,是消息的载体。
public int what id标识
//可以携带简答的参数,也可以不用来携带数据
public int arg1 参数1
public int arg2 参数2
public Object object 可以用来携带复杂的数据
publc Message obtain(Handler h, int what, Object obj) 创建一个Message对象
MessageQueue
存储Handler发送的消息
按Message.when排序队列的优先级
Looper
通过循环MessageQuene里面当前需要处理的Message,
交给对应的Handler进行处理,处理完成,将Message对象
缓存到消息池中,以备复用。
Handler
Handler.sendMessage(Message message) 发送一个即时消息
Handler.sendMessageDelayed(Message message,long time) 发送一个延时消息
Handler.handlerMessage(Message msg) 处理信息,回调方法
Handler.removeMessage(int what) 删除还没有未处理的消息
Handler简单的示例
public class MainActivity extends AppCompatActivity {
private TextView user,password;
private Random random=new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
user=findViewById(R.id.user);
password=findViewById(R.id.passdword);
final Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what==1){
User u= (User) msg.obj;
user.setText(u.getUserName());
password.setText(u.getPassword());
}
}
};
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message message=Message.obtain(handler,1,new User(Make(),Make()));
handler.sendMessage(message);
}
}
}).start();
}
private String Make(){
String str="";
for(int i=0;i<5;i++){
str+=random.nextInt(9)+1;
}
return str;
}
}
消息机制处理原理图