Android多執行緒 Handler的簡單使用

2021-08-19 04:34:05 字數 1466 閱讀 7976

我們先來總結下使用handler的步驟:

建立hanlder物件,並在handlemessage方法中完成邏輯**

建立子執行緒,在子執行緒中建立message物件,使用handler.post方法將訊息傳送給訊息佇列(messagequeue)

handler收到訊息,並呼叫handlemessage方法完成通訊(本質上是looper輪詢從messagequeue中取出訊息,並將其傳送給message的target,也就是傳送給了handler)

上**:

/**

* 第一步,主線程中建立handler並在handlemessage方法中處理相應邏輯

*/private handler handler = new handler()

};

handler的建立還有其他的方法,比如傳入乙個callback物件的構造方法等等,不一而論, 這裡handlemessage方法主要是用來處理子執行緒中傳遞出來的訊息

android中建立子執行緒的方法有很多,我這裡使用了一種最常見的方法:

//建立子執行緒

downloadthread = new thread(new runnable() catch (interruptedexception e)

message message = message.obtain();

message.what = message_what_update_progress;

message.obj = progress;

handler.sendmessage(message);}}

}});

可以看到上述**中,主要是模擬了耗時操作,每100ms發出一次訊息,訊息體中what主要用於區分訊息型別,obj攜帶訊息內容,最後呼叫handler.sendmessage方法將其發出。其中message的初始化有多種方式,常用的有三種:

其中我們經常使用的是後兩者,而不推薦使用前者,這主要是因為,後兩者是從乙個可**的物件池中獲取message物件,比重新new乙個message物件效能更好。

looper取到訊息後會根據message的target物件將訊息傳送給相應的handler(hander.sendmessage方法會將自身設為該message的target),然後呼叫handlermessage進行處理:

handler = new handler() 

if(progress*2

<= max_progress) else

tvprogressvalue.settext(value);}}

};

整個handler的使用流程就是這樣了,下面是demo的執行畫面:

這裡就是乙個完整的handler使用的流程了,其中涉及到了一些名詞,如message、messagequeue、looper等,我們會在後面詳解hanlder中進行講解,那麼這篇文章就到這裡,接下來敬請期待~

Android 多執行緒

1 簡介 2 android 平台下的多執行緒 package com.powerise.thread import android.os.bundle import android.view.view import android.view.view.onclicklistener import ...

Android 多執行緒

1,常用的thread 和running的方法 public static void thread thread.start private static void running thread thread new thread runnable thread.start private stat...

Android 多執行緒

最近開始做安卓專案,然而對多執行緒的理解和應用還是欠缺,最近就系統的學習一下 public class testthreadactivity extends baseactivity private void initviews private class mytask extends asynct...