舉例子解釋Handler消息傳遞機制

Handle類的主要作用有兩個:

一:在新啓動的線程中發送消息    二:在主線程中獲取、處理消息


下面通過一個新線程來週期性的修改ImageView所顯示的圖片,通過這種方式來開發一個動畫效果,代碼如下:

public class MainActivity extends Activity {
    int[] imageIds = new int[]{
            R.drawable.a,//a,b,c,d,e分別表示5張圖片資源的名稱
            R.drawable.b,
            R.drawable.c,
            R.drawable.d,
            R.drawable.e
    };

    int currentImageId = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ImageView show = findViewById(R.id.show);
        final Handler myhandler = new Handler(){

            @Override
            public void handleMessage(Message msg) { //Handler在主線程接收消息0x1233,並往下執行更改圖片
                //如果該消息是本程序發送的
                if(msg.what == 0x1233){
                    //動態的修改所顯示的圖片
                    show.setImageResource(imageIds[currentImageId++%imageIds.length]);
                }
            }
        };

        //定義一個計數器,讓該計時器週期性的執行指定的任務
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                myhandler.sendEmptyMessage(0X1233); //新線程往主線程發送消息0x1233
            }
        },0,1200);

        //Timer().schedule(TimerTask task, Date when, long period);三個參數的意思分別是:
        /*
        1 ,task:所安排的時間線程
        2,when:第一次執行的時間
        3, period:間隔的執行時間
         */

    }

}


發佈了31 篇原創文章 · 獲贊 44 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章