亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android面試??虷andler詳解

難度中級
時長 2小時 0分
學習人數
綜合評分9.30
169人評價 查看評價
9.7 內容實用
9.3 簡潔易懂
8.9 邏輯清晰
  • handler原理
    查看全部
  • handler機制原因
    查看全部
  • Handler與Looper和MessageQueue的關系
    查看全部
  • handler中常見的兩種報錯
    查看全部
  • handler
    查看全部
  • 帶Callback參數的Handler可以截獲消息,true則攔截,false則不攔截
    查看全部
  • 面試用:在非主線程是否可以更新UI 答:當剛啟動還沒有onResume的時候可以,即onCreate里面 ViewRootImp是在onResume方法中初始化的,在onCreate方法中創建線程并執行,此時還沒有初始化ViewRootImp
    查看全部
  • 更新ui的四種方法: 第一種: private void handle1(){ handler.post(new Runnbale(){ public void run(){ textView.setText("ok"); } }); } 第二種:直接在子線程中使用sendMessage,在創建handler對象的時候,在其中的handleMessage方法中去更新ui private void handler2(){ handler.sendEmptyMessage(1); } 第三種: private void handler3(){ runOnUiThread(new Runnable(){ public void run(){ textView.setText("ok"); } }) } 第四種: private void viewUi(){ textView.post(new Runnable(){ public void run(){ textView.setText("ok"); } }) }
    查看全部
  • 1.創建主線程的handler,并向子線程發送消息: //主線程的handler Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { Message message = new Message(); threadHandler.sendMessageDelayed(message, 1000);//向子線程發送消息 }; }; 2.創建子線程的handler,向主線程發送消息,要關聯一個threadHandler,threadHandler.getLooper()得到一個looper對象 HandlerThread handlerThread = new HandlerThread("handler thread"); handlerThread.start();//不要忘記調用start方法! //子線程的handler threadHandler = new Handler(handlerThread.getLooper()){ @Override public void handleMessage(Message msg) {//處理消息 Message message = new Message(); handler.sendMessageDelayed(message, 1000); } };
    查看全部
  • HandlerThread 1. Handler在創建的時候可以指定Looper,這樣通過Handler的sendMessage()方法發送出去的消息就會添加到指定Looper里面的MessageQueue里面去。在不指定Looper的情況下,Handler綁定的是創建它的線程的Looper。 如果這個線程的Looper不存在,程序將拋出"Can't create handler inside thread that has not called Looper.prepare()"。 2. HandlerThread繼承于Thread,所以它本質就是個Thread。與普通Thread的差別就在于,它有個Looper成員變量。 在其run()方法中,調用Looper.myLooper()獲得一個looper對象。 synchronized (this) { mLooper = Looper.myLooper(); notifyAll(); 在創建handler時使用getLooper()方法,其實現其實是一直等待looper對象的獲得。 while (isAlive() && mLooper == null) { try { wait(); } } 3. HandlerThread的用處 創建Handler的時指定的looper,可以是別的線程創建的。所以Handler中MessageQueue的輪詢不一定非要是創建Handler的線程進行,還可以在別的線程中進行。 這個時候我們就需要使用HandlerThread這個類來創建這個Looper了,這樣消息的處理就在新創建的HandlerThread中進行。 mThread = new HandlerThread("Handler Thread"); mHandler = new Handler(mThread.getLooper()){ public void handleMessage(android.os.Message msg) {... }; }; 同樣需要注意:在新創建的ThreadThread中不能有更新UI的操作。
    查看全部
  • public class MyThread extends Thread { /** * 與子線程相關的Handler */ public Handler handler; @Override public void run() { Looper.prepare();//消息隊列準備 handler = new Handler(){ @Override public void handleMessage(Message msg) { System.out.println("currentThread:" + Thread.currentThread()); } }; Looper.loop();//循環處理消息 } }
    查看全部
  • Message:消息,其中包含了消息ID,消息處理對象以及處理的數據,由MessageQueue同意列隊,終由Handle處理 Handle:處理者,負責Message的接受和處理,使用Handle時,需要實現handleMessage(Message msg)方法對特定的Message進行處理,例如對UI更新等。 MessageQueue:消息隊列,用來存放Handle發送過來的消息,并按照FIFO規則執行,當然,存放Message并非實際意義的保存,而是將Message以鏈表的方法串聯起來的,等待Looper的抽取 Looper:消息泵。不斷地從MessageQueue中抽取Message執行,因此,一個MessageQueue需要一個Looper。 Thread:線程,負責調整整個消息循環,及消息循環的執行場所
    查看全部
  • 1、handler 消息處理器,負責處理消息。 2、Message 消息,包含消息id,被處理的對象。 3、MessageQueue 消息隊列,存放Handler發送過來的Message 4、looper 消息泵,不間斷的從MessageQueue消息隊列中抽取消息。 簡單的比喻looper就是水泵,MessageQueue儲水的池塘,Message就是水,Handler就是操作的人
    查看全部
  • handler.removeCallBack(runnable) 可以移除一個已經掛接執行的方法 Handler handler=new Handler(new Callback(){里面也有個boolean handleMessage 返回true時可以截獲發送到handler的message}){@Override void handleMessage()}
    查看全部
  • 通過 handler來實現sendMessage的方法的步驟: 1.創建一個handler的對象,并在其中重寫handlerMessage的方法,并在其中更新ui private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { textView.setText("" + msg.arg1);};}; 2.創建一個Thread類,在其中的run()方法中初始化一個message,并為message來賦值,并調用handler的sendMessage的方法 new Thread() { public void run() { try { Thread.sleep(2000); Message message = new Message(); message.arg1 = 88; handler.sendMessage(message); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }; 這樣,執行這個線程的時候就會通過sendMessage的方法將message參數傳遞過去,并在上面的初始化handler的時候接受到參數,并實現更新ui Message message=handler.obtainMessage()得到系統消息(自動定位到handler就不用handler.sendMessage())或者Message message=new Message() handler發送的消息 handler.sendMessage(message) message.sendToTarget()對于已經綁定好handler的message
    查看全部

舉報

0/150
提交
取消
老師告訴你能學到什么?
通過本課程,你將學到: 1、什么是Handler 2、如何使用Handler 3、Handler的原理是什么 4、如何定義一個與線程相關的Handler 5、Android更新UI的幾種方式 6、非UI線程真的不能更新UI嗎 7、Handler使用過程中遇到的問題

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!