1. <i id="6fn9r"><bdo id="6fn9r"></bdo></i>

    2. <u id="6fn9r"><sub id="6fn9r"></sub></u>
    3. <u id="6fn9r"><bdo id="6fn9r"></bdo></u>
        最新開班
        課程名稱 報名截止 報名人數
        高中起點學習班 即將開班 熱招中
        企業委培訂制班 即將開班 熱招中
        私人名師輔導班 即將開班 熱招中
        待業速找工作班 即將開班 熱招中
        專家大課堂
        accp
        accp
        男生
        女生學什么好?女生學什么有前途?
        高中落榜怎么辦?高中生可以學軟件么?
        專職、再就業,讓你的生涯不再與苦累相伴。
        聯系方式
        地圖

        免費咨詢:400-696-8028

        報名電話:0731-88122069

        學校地址:長沙市開福區金霞跨境產貿城北大青鳥校區

        Android開發——消息處理傳遞機制
        發布時間:2015-10-01

         在程序開發時,對于比較耗時的操作,通常會為其開辟*個單獨的線程來執行,以盡可能減少用戶的等待時間。在Android中,默認情況下,所有的操作都是在主線程中進行的,主線程負責與UI相關的事件。而在自己新建的線程中,不能對UI進行操作。因此Android提供了消息處理傳遞機制來解決這*問題。

        Message,消息類。存放于MessageQueue中,包含數據類型,用戶自定義的消息代碼等。

        MessageQueue,消息隊列。在MessageQueue中,存放的消息按照FIFO(先進先出)的原則執行。

        Handler,消息發送類。發送或者處理Message對象到所在線程的MessageQueue中。

        Looper,循環者。用來循環讀取存放于MessageQueue中的消息。*個線程對應*個Looper,*個Looper對象對應*個MessageQueue。Android中新增的線程是沒有開啟消息循環的,但是主線程除外。系統自動為主線程創建Looper對象。

        *:在非主線程中創建Looper

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        class LooperThread extends Thread {
              public Handler mHandler;//聲明*個Handler對象
                 
              public void run() {
                  Looper.prepare(); //初始化Looper對象         
                  mHandler = new Handler() {
                      public void handleMessage(Message msg) { //重寫方法
           
          // process incoming messages here
                      }
                  };
                  Message m=mHandler.obtainMessage();//獲取*個消息
                  m.what=0x11;設置Message的what屬性的值
                  mHandler.sendMessage();//發送消息         
                  Looper.loop();//啟動Looper
              }
        }

        二:*個打地鼠游戲

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        44
        45
        46
        47
        48
        49
        50
        51
        52
        53
        54
        55
        56
        57
        58
        59
        60
        61
        62
        63
        64
        65
        66
        67
        public class MainActivity extends Activity {
          private int i = 0// 記錄其打到了幾只地鼠
          private ImageView mouse; // 聲明*個ImageView對象
          private Handler handler; // 聲明*個Handler對象
          public int[][] position = new int[][] { { 231325 }, { 424349 },
              521256 }, { 543296 }, { 719245 }, { 832292 },
              772358 } }; // 創建*個表示地鼠位置的數組
           
          @Override
          public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mouse = (ImageView) findViewById(R.id.imageView1); // 獲取ImageView對象
            mouse.setOnTouchListener(new OnTouchListener() {
           
              @Override
              public boolean onTouch(View v, MotionEvent event) {
                v.setVisibility(View.INVISIBLE); // 設置地鼠不顯示
                i++;
                Toast.makeText(MainActivity.this"打到[ " + i + " ]只地鼠!",
                    Toast.LENGTH_SHORT).show(); // 顯示消息提示框
                return false;
              }
            });
           
            handler = new Handler() {
              @Override
              public void handleMessage(Message msg) {
                int index = 0;
                if (msg.what == 0x101) {
                  index = msg.arg1; // 獲取位置索引值
                  mouse.setX(position[index][0]); // 設置X軸位置
                  mouse.setY(position[index][1]); // 設置Y軸位置
                  mouse.setVisibility(View.VISIBLE); // 設置地鼠顯示
                }
                super.handleMessage(msg);
              }
           
            };
            Thread t = new Thread(new Runnable() {
           
              @Override
              public void run() {
                int index = 0// 創建*個記錄地鼠位置的索引值
                while (!Thread.currentThread().isInterrupted()) {
                  index = new Random().nextInt(position.length); // 產生*個隨機數
                  Message m = handler.obtainMessage(); // 獲取*個Message
                  m.what = 0x101// 設置消息標識
                  m.arg1 = index; // 保存地鼠標位置的索引值
                  handler.sendMessage(m); // 發送消息
           
                  try {
                    Thread.sleep(new Random().nextInt(500) + 500); // 休眠*段時間
                  catch (InterruptedException e) {
                    e.printStackTrace();
                  }
           
                }
           
              }
           
            });
            t.start(); // 開啟線程
           
          }
           
        }

        上一篇:Android開發 Unity3D基礎 Android Development
        下一篇:不容錯過!開發者必備的十二大Android開發資源

        長沙科泰
        長沙科泰
        長沙科泰IT教育
        成年女人AA级毛片免费观看_一级a一级a国产爰片免费免免_亚洲免费看_免费国产一级 片内射视频播

          1. <i id="6fn9r"><bdo id="6fn9r"></bdo></i>

          2. <u id="6fn9r"><sub id="6fn9r"></sub></u>
          3. <u id="6fn9r"><bdo id="6fn9r"></bdo></u>