Handler

来源:互联网 发布:淘宝女装哪家好 编辑:程序博客网 时间:2024/06/07 22:26

    1. Message

     消息

    2. Message Queue

     消息队列,用来存放通过Handler发送的消息,按照先进先出执行。

    3. Handler

     Handler是Message的主要处理者,将Message添加到消息队列中以及对消息队列中的Message进行处理(发送和处理消息)。

    4. Looper

    循环取出Message Queue里面的Message,并对相应的Handler进行处理(主线程创建的时候,Looper就被创建了)。

    注意:安卓中的UI更新只能在主线程中操作


    handler机制:


     子线程不能直接更新UI,拿到主线程handler对象,发送消息,发送消息后,主线程进入messageQueue消息队列里面,由lopper循环从消息队列取消息,拿给handler,handler通过handlerMassage处理消息

Handler的使用步骤:

1.在主线程下创建Handler

2.子线程利用Handler对象发送消息

3.处理消息,在Handler对象中重写handlerMessage方法

下面是具体代码实现:

推荐使用这个:

public class MainActivity extends AppCompatActivity {    Button but;    Message message;    Handler handler = new Handler() {//Handler导包时注意是  os包        @Override        public void handleMessage(Message msg) {//重写handleMessage            super.handleMessage(msg);            if (msg.what == 1) {//判断what和传递的值是否一样                int i= (int) msg.obj;                but.setText(i+"");            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        but = (Button) findViewById(R.id.but);        new Thread() {            @Override            public void run() {                super.run();                for (int i = 3; i > 0; i--) {                    try {                        sleep(1000);                        /**传递信息*/                        message = new Message();                        message.what = 1;                        message.obj = i;                        handler.sendMessage(message);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }.start();    }}

当然Handler还有其他的方法实现:

1.runOnUiThread()

               runOnUiThread(new Runnable() {                    @Override                   public void run() {                      but.setText("123456");                   }               });

2.new Handler().postDelayed()

        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                Toast.makeText(MainActivity.this,"",Toast.LENGTH_SHORT).show();            }        },3000);



0 0
原创粉丝点击