学习android——handler机制的一些相关知识

  handler从我们开始学安卓到后面工作中,都在使用它,对于我而言其实就是知道它是发消息的,更新界面的,好像其他的也没有怎 么用,实际开发中我们很多时候对于一个zhis知识就是知道怎么用,要追究最根本的原因还是差一丢丢。所以自己今天就把自己理解的整理一番,参考的文献文章放在最后

Handler是什么呢?

很多时候我们说:线程与线程间进行通信的一套机制”。也有说是:handler是更新UI界面的机制,也是消息处理的机制,我们可以发送消息,也可以处理消息

 

为什么会有这个Handler机制?

答:Android在设计的时候,封装了一套消息创建、传递、处理机制,如果不遵循这样的机制就没办法更新UI信息,就会抛出异常

Android为什么要设置只能通过Handler机制更新UI?

答:最根本的问题解决多线程并发的问题;

      假设如果在一个Activity中,有多个线程去更新UI,并且都没有加锁机制,马么会产生生么样的问题?——更新界面混乱;

      如果对更新UI 的操作都加锁处理的话会产生什么样子的问题?——性能下降

      对于上述问题的考虑,Android提供了一套更新UI的机制,我们只需要遵循这样的机制就好了。

      不用关心多线程的问题,更新UI的操作,都是在主线程的消息队列当中轮询处理的。

 

handler的机制原理是什么?

1、 Handler机制是由Looper和MessageQueue来构建消息机制的

2、 Handler负责发送消息(发起者),Looper负责接收handler发送的消息(只可以接受)消息回传给handler自己(再把收到的球又抛回去给handler)。MessageQueue存储消息的容器(一个记录的人)。Message具体发送的消息(到底发了些啥,这里知道)。

HandlerThread的作用是什么?

答:HandlerThread thread=new HandlerThread("handler thread");自动含等待机制,等Looper创建好了,才创建Handler,避免出现空指针异常。

 Looper 死循环为什么不会导致应用卡死?

线程默认没有Looper的,如果需要使用Handler就必须为线程创建Looper。我们经常提到的主线程,也叫UI线程,它就是ActivityThread,ActivityThread被创建时就会初始化Looper,这也是在主线程中默认可以使用Handler的原因。

android 中更新UI的几种方式

常见的大概有四种:runOnUiThread、handler post、handler sendMessage、view post

Handler handler = new Handler() {

// 实现一下Handler里面的handleMessage方法

public void handleMessage(android.os.Message msg) {

// 第二个方法是从外边拿到数据然后返回到里面

textView.setText("第二种方法handlerEmptyMessags");

}};

/**

* 第一方法 Handler post

*/

public void handler1() {

handler.post(new Runnable() {

@Override

public void run() {

// 这里弄个文本消息

textView.setText("第一种方法Handler post");

}});}

/**

* 第二种方法 sendEmptyMessage

*/

public void handler2() {

handler.sendEmptyMessage(1);

}

/**

* 第三种方法 runOnUiThread

*/

public void handler3() {

runOnUiThread(new Runnable() {

@Override

public void run() {

textView.setText("第三个方方法runOnUiThread");

}});}

/**

* 第四种方法view

* post----它会判断当前是不是UI线程,默认情况下,会通过Handler.post发送一个action。如果是UI线程的话执行run()方法

*/

public void handler4() {

textView.post(new Runnable() {

@Override

public void run() {

textView.setText("第四种方法 view post");

}});}

猜你喜欢

转载自blog.csdn.net/qq_22576071/article/details/81304282