91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

與Handler有關的幾個概念

發布時間:2020-07-10 09:23:40 來源:網絡 閱讀:781 作者:VincentTung 欄目:開發技術

注: 相關圖片都是用的別人的

1.Handler 主要用于消息處理

2.Message:消息,子線程向UI線程發送消息,消息中攜帶者相應數據。

3.MessageQueue:消息隊列,有一個格Message消息組成

4.Looper :信息泵,循環處理消息隊列MessageQueue中的Message,將其發送給相應的Handler

5.LooperThread,如果要非UI線程中實例化Handler,必須有Looper,而一般子線程中是不存在Looper的,一個線程可以有一個Looper對象和一個MessageQueue,必行顯示調用Looper.loop( )方法給其分配出Looper對象才能使用。

一個線程對應一個Looper

一個Looper對應一個MessageQueue

一個Looper可以對應多個Handler

記住:HandlerThread =普通Thread+Looper

詳細的運行過程看下兩圖:

 

與Handler有關的幾個概念

 

與Handler有關的幾個概念

一.Handler的方法使用

Handler可以將兩種類型消息放到消息隊列中,一種是Message另種是Runnable對象,如果是Message對象時,通過HandlerhandleMessage( )方法處理,如果是Runnable對象的時候,當Handler拿到Looper發送過來的Runnable對象的時候,會直接運行Runnablerun( )方法,注意Runnable對象時運行在相應Handler所在的線程中的(一般是UI線程),沒有start,直接調用了run( )方法。

 

  1. /** 
  2.                  *  
  3.                  * handler.post(Runnable); 
  4.                  *  
  5.                  *  
  6.                  */ 
  7.                 handler.post(new Runnable() { 
  8.  
  9.                     @Override 
  10.                     public void run() { 
  11.                         isChanging = true
  12.                         bar.setProgress(count); 
  13.                         count++; 
  14.  
  15.                     } 
  16.  
  17.  
  18.                 }); 
  19.  
  20.  
  21.                 /** 
  22.                  *  
  23.                  *  
  24.                  * hanlder.postDelayer(Runnable,timeDelayed); 
  25.                  *  
  26.                  */ 
  27.                 handler.postDelayed(new Runnable() { 
  28.  
  29.                     @Override 
  30.                     public void run() { 
  31.                         isChanging = true
  32.                         bar.setProgress(count); 
  33.                         count++; 
  34.  
  35.                     } 
  36.  
  37.                 },100); 
  38. /** 
  39.  * 重點看一下handler是怎么發送msg的 
  40.  *  
  41.  * 1.可以發送空的Message 
  42.  * 2.可以定時發送Message 
  43.  * 3.Message可以攜帶的數據有   int what,int arg1,int arg2,Object obj, Bundle bundler(通過msg.setData(Bundle bundler)來添加到Message對象中) 
  44.  *  
  45.  * 4.Message通過Handler.obtain()方法實例化,可以進行有參、無參實例化,其中有參實例化是可以出傳入 int what,int arg1,int arg2, Object obj 
  46.  * @author VicentTung 
  47.  * 
  48.  */ 
  49.  
  50.  
  51.  
  52.  
  53.                 /** 
  54.                  * 1.發送空的Message 
  55.                  */ 
  56.  
  57.                 handler.sendEmptyMessage(0); 
  58.  
  59.                 handler.sendEmptyMessageAtTime(0, System.currentTimeMillis()); 
  60.  
  61.                 handler.sendEmptyMessageDelayed(0, 100); 
  62.  
  63.  
  64.                 /** 
  65.                  *2. 發送非空Message(Message是new出來的) 
  66.                  */ 
  67.                 Message msg =new Message(); 
  68.                 Bundle data_bundle = new Bundle(); 
  69.                 data_bundle.putString("name", "小明"); 
  70.                 data_bundle.putInt("age", 12); 
  71.                 msg.arg1=1; 
  72.                 msg.arg2=2; 
  73.                 msg.what=3
  74.                 msg.obj="success"
  75.                 msg.setData(data_bundle); 
  76.                 handler.sendMessageDelayed(msg, 100); 
  77.  
  78.                 /** 
  79.                  * 3.發送非空Message(Message是handler.obtain()出來的) 
  80.                  */ 
  81.  
  82.                  
  83.                 String obj="hahah"
  84.                 int arg1=111
  85.                 int arg2=222
  86.                 Message msg_obtain =handler.obtainMessage(); 
  87.              
  88.                 /** 
  89.                  *  各種各樣的帶參數的obtain()方法實例化出Message對象 
  90.                  */ 
  91.                 msg_obtain =handler.obtainMessage(what); 
  92.                 msg_obtain = handler.obtainMessage(what, obj); 
  93.                 msg_obtain = handler.obtainMessage(what, arg1, arg2); 
  94.                 msg_obtain =handler.obtainMessage(what, arg1, arg2, obj); 
  95.  
  96.                  
  97.                 /** 
  98.                  * 4.Message的移除 
  99.                  */ 
  100.  
  101.                  
  102.                 if(handler.hasMessages(0)){ 
  103.                      
  104.                     handler.removeMessages(0); 
  105.                 } 

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

华安县| 灵石县| 长治市| 太仓市| 大安市| 许昌市| 晋州市| 南木林县| 上高县| 石泉县| 屏南县| 定结县| 英德市| 工布江达县| 彝良县| 吐鲁番市| 江西省| 浠水县| 双流县| 平罗县| 桐城市| 广饶县| 太仆寺旗| 泉州市| 柘荣县| 福鼎市| 门头沟区| 扎赉特旗| 五峰| 安龙县| 保康县| 宜春市| 河东区| 大方县| 嘉荫县| 哈巴河县| 西充县| 苏尼特左旗| 鄂托克旗| 金堂县| 横山县|