-
Android為什么要設(shè)計只能通過handler機(jī)制更新UI查看全部
-
使用“Message”方式“發(fā)送消息”,使“Handler處理消息,并更新UI” 1.定義Handler,并且實(shí)例化,使用默認(rèn)構(gòu)造函數(shù)即可。 2.重寫handlerMessage方法。 private Handler msgHandler=new Handler(){ //定義handler,重寫處理message方法。當(dāng)該handler發(fā)送消息的時候,這個方法會被執(zhí)行。 public void handleMessage(android.os.Message msg) { //msg為當(dāng)有sendMessage方法調(diào)用時,傳過來的Message對象。 mTextView.setText("msg:"+msg.arg1); }; }; 3.定義Message對象。其中,Message提供了三個公共變量。arg1,arg2,obj,可以將消息放入其中,作為消息信息。然后發(fā)送消息即可 new Thread() { public void run() { Message message=msgHandler.obtainMessage();//從Handler對象中獲取Message對象,而不是自己new,這樣效率高。 message.arg1=1; message.sendToTarget(); //對于從handler對象中獲取的message,可以直接使用該方法發(fā)送消息。 //msgHandler.sendMessage(message); //發(fā)送消息 }; }.start(); 知識拓展: 1。實(shí)例化Handler時,可以使用帶一個Callback接口參數(shù)的構(gòu)造函數(shù)。 其中Callback有一個未實(shí)現(xiàn)的方法。 這個方法有一個返回值(boolean) 2.當(dāng)該Handler收到消息時,首先會調(diào)用Callback中的消息處理方法。 2.1 如果返回值為false,消息不會被截斷。Handler依然可以處理該消息。 2.2 如果返回值為true,消息將會被截斷。Handler中的處理消息方法不會被執(zhí)行。查看全部
-
Callback()和 Handler()一樣,都有handleMessage(Message message)方法,不同的是前者是有返回值的。 使用Callback()攔截消息: 在 Handler 發(fā)送消息的過程中,我們是可以去截獲這個消息。要怎么去截獲呢?在創(chuàng)建Handler對象的時候我們需要傳入一個參數(shù),也就是 new 一個 Callback 對象,在 Callback 對象當(dāng)中就可以截獲 Handler 發(fā)送過來的消息: Callback內(nèi)部的方法 handlerMessage()默認(rèn)返回一個 false,如果改成 true,就會截獲消息,也就是說,Handler內(nèi)部的方法 handlerMessage()將不會被執(zhí)行。查看全部
-
1. 我們要創(chuàng)建一個handler的時候,它會和默認(rèn)的一個線程進(jìn)行綁定,而這個默認(rèn)的線程當(dāng)中就有一個MessageQueue(消息隊列)。 2. handler的兩個用途:(1)定時發(fā)送一個Messages或者Runnables對象;(2)可以在一個線程當(dāng)中去處理并執(zhí)行一個Action的動作。 3. 主線程運(yùn)行一個消息隊列,并管理著一些頂級的應(yīng)用對象(top-level application objects),包括Activity、Broadcast Receiver等等,這些對象默認(rèn)都是創(chuàng)建在Activity Thread(也就是我們常說的UI線程或者主線程)當(dāng)中。 下面圖是通過postDelayed來更新圖片 Handler的示例,實(shí)現(xiàn)圖片輪播。 代碼實(shí)現(xiàn) 1. 在主布局中定義一個ImageView控件。 2. 在 MainActivity 中創(chuàng)建并初始化ImageView,定義一個圖片數(shù)組 images 和數(shù)組下標(biāo)索引 index,創(chuàng)建一個Handler對象。 3. 創(chuàng)建一個內(nèi)部類 MyRunnable 實(shí)現(xiàn) Runnable 接口,重寫 run() 方法: public void run() { index++; index = index%3; // 圖片輪播(一般是通過ViewPager實(shí)現(xiàn)圖片輪播) imageView.setImageResource(images[index]); handler.postDelayed(myRunnable,1000); // 每隔一秒換一次圖片 } 4. 在onCreste()方法中調(diào)用handler,也就是在主線程中調(diào)用handler: handler.postDelayed(myRunnable,1000);查看全部
-
framework是什么?查看全部
-
ActivityThread Handler通信查看全部
-
Handler原理圖解查看全部
-
Handler的原理查看全部
-
android為什么要設(shè)計只能通過handler機(jī)制更新UI呢?查看全部
-
為什么要使用Handler?查看全部
-
Handler是什么?查看全部
-
圖解handler流程查看全部
-
一句總結(jié)搞定handler機(jī)制查看全部
-
handler原理查看全部
-
android為什么設(shè)計只能通過handler機(jī)制更新UI?查看全部
舉報
0/150
提交
取消