handler用法






package cn.edu.jlnu.asymessage;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;

public class MainActivity extends AppCompatActivity {

    private Button btn;
    private ProgressBar pb;
    private int progress=0;
    private Handler handler=new Handler(){
        /**
         * Subclasses must implement this to receive messages.
         *
         * @param msg
         */
        @Override
        public void handleMessage(Message msg) {
                switch (msg.what){
                    case 1:
                        btn.setText("呵呵");
                        break;
                    case 2:
                        String str= (String) msg.obj;
                        btn.setText(str);
                        break;
                    case 3:
                        if(progress<=100){
                            progress+=10;
                            pb.setProgress(progress);
                            handler.sendEmptyMessageDelayed(3,2000);
                        }
                        break;
                }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pb= (ProgressBar) findViewById(R.id.progress);
        btn= (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {//
                    @Override
                    public void run() {
//                        try {
//                            /*
//                                報錯
//                                不能在子線程操作UI控件
//                             */
//                            Thread.sleep(2000);
//                        } catch (InterruptedException e) {
//                            e.printStackTrace();
//                        }
//                        handler.sendEmptyMessage(1);
                        /*
                            此代碼和以上實現的功能是一樣的!
                         */
                      //  btn.setText("呵呵");
                       // handler.sendEmptyMessageDelayed(1,2000);

                        /*
                            以下發送一個消息實體
                         */
//                        String str="我愛你,中國!";
//                        Message message=new Message();
//                        message.obj=str;
//                        message.what=2;
                     //   handler.sendMessage(message);
             //           handler.sendMessageDelayed(message, 3000);
                    }
                }).start();
                //testTimer();
                testPost();
            }
        });
    }
    public void testTimer(){
        pb.setVisibility(View.VISIBLE);
        handler.sendEmptyMessageDelayed(3, 2000);
    }
    public void testPost(){//post方法允許你排列一個runnable對象到主線程隊列中,等待執行!
//        handler.post(new Runnable() {
//            @Override
//            public void run() {
//                Log.d("TAG","handler post");
//            }
//        });
//        handler.postDelayed(new Runnable() {
//            @Override
//            public void run() {
//                Log.d("TAG","handler post delay");
//            }
//        },2000);
        //所以它可以直接操控UI
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //在非主線程(UI線程)更新UI控件
//                handler.post(new Runnable() {
//                    @Override
//                    public void run() {
//                        btn.setText("我愛你,祖國!");
//                    }
//                });
//                handler.postDelayed(new Runnable() {
//                    @Override
//                    public void run() {
//                        btn.setText("我愛你,祖國!");
//                    }
//                },3000);
                //以下方法依然可以
//                btn.post(new Runnable() {
//                    @Override
//                    public void run() {
//                        btn.setText("我愛你,吉林!");
//                    }
//                });
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        btn.setText("我愛你,四平!");
                    }
                });
            }
        }).start();
    }
}


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