Handler的一些用法

衆所周知Android是不允許在非UI線程中更新(修改)UI的,那麼我們又該如何在非UI線程中更新(修改)UI呢?Android爲我們提供了Handler,使用Handler可以讓我們在非UI線程中更新(修改)UI。
那麼下面就介紹一下Handler的用法:

用法一:

new Thread() {
    public void run() {
        try {
            // 休眠一秒
            Thread.sleep(1000);
            //Handler handler = new Handler()
            handler.post(new Runnable() {
              @Override
              public void run() {
                 //TextView tv = (TextView)findViewById(R.id.tv);
                 //在Runnable中改變UI
                 tv.setText("我改變了");
              }
           });
        } catch (InterruptedException e) {
            e.printStackTrace();
         }
    };
}.start();

用法二:

private MyRunnable mRunnable = new MyRunnable();
    class MyRunnable implements Runnable{
        @Override
        public void run() {
            //int i = 60
            tv.setText(--i+"");
            //Handler handler = new Handler();
            //一秒鐘調用一次
            handler.postDelayed(mRunnable, 1000);
        }

    }
    //在需要調用的地方寫上“handler.postDelayed(mRunnable, 1000);”

用法三:

//Handler handler
        handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                //TextView tv = (TextView) findViewById(R.id.tv);
                tv.setText("arg1="+msg.arg1+"&arg2="+msg.arg2);

            }
        };

        new Thread(){
            public void run() {
                try {
                    Thread.sleep(1000);
                    Message message = new Message();
                    //或者是Message message = handler.obtainMessage();
                    message.arg1 = 123;
                    message.arg2 = 321;
                    //除了將arg1和arg2發送之外還可以通過message.obj發送一個對象
                    handler.sendMessage(message);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            };
        }.start();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章