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

溫馨提示×

溫馨提示×

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

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

Android開發中常見問題有哪些

發布時間:2022-01-04 09:56:01 來源:億速云 閱讀:124 作者:小新 欄目:移動開發

這篇文章主要介紹Android開發中常見問題有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

(1) Service與Thread有什么區別?

(2) 在Activity里new Handler()和在自己創建的Thread中new Handler()有什么區別?

第一個問題其實是一個偽命令,因為Service是Android四大組件之一,而Thread只是Java提供的一個封裝了線程管理的工具類,無論是Activity還是Service,都可以通過Thread來創建一個工作線程,但是很多新手會搞不清楚它們之間的區別,借此可以試探一下面試者到底有沒有很清楚地理解Android的Service到底是做什么的。

第二個問題,涉及到Android開發必須掌握的知識點:Handler,本文就來從這個問題開始,說說我對Handler的理解。

當Android應用啟動后,系統會默認創建一個主線程(Main thread)。這個主線程啟動后,首先完成UI的繪制,然后會進入一個消息循環(Loop),等待和執行各種來自系統的消息和事件、各種用戶點擊/觸摸事件、其他線程發送的消息事件等等。這是線程工作的一種常見的模式,即進入一種“等待命令”->“執行命令/消息”->“等待命令/消息”的循環。

那么,其他非UI線程如何與進入了消息循環的主線程交互呢?這就得靠Handler了。

Handler是Android系統為工作線程提供的一種可以與外界交互的接口,通過Handler提供的sendMessage()方法,外界可以發送各種消息事件給工作線程。Handler通過構造函數完成與指定線程的綁定,其構造函數定義如下:

public Handler() {
    this(null, false);
}

public Handler(Looper looper) {
    this(looper, null, false);
}

public Handler(Looper looper, Callback callback) {
    this(looper, callback, false);
}

public interface Callback {
    public boolean handleMessage(Message msg);
}

其中,Looper就是線程內部負責實現消息循環的對象,普通的Java.Thread線程內部是沒有這樣一個消息循環對象的,Android專門提供了HandlerThread封裝這種帶消息循環機制的線程。Handler通過與線程的Looper對象綁定,來完成與該Thread的綁定。

Callback則是由工作線程內部傳出接收到的消息的回調接口,其他線程通過Handler的sendMessage發送消息給工作線程后,工作線程就會通過Callback將接收到的消息通知給監聽者。

注意:默認情況下,如果new Handler()的時候,沒有傳入某個線程的Looper對象(或傳入null),系統就會默認綁定到創建Handler()對象的線程中。

那么,現在可以回答第二個問題了,在Activity里new Handler()和在自己創建的Thread中new Handler()有什么區別?

答案:

Activiy默認是工作在主線程中的,所以在Activity中new Handler()后,該Handler對象默認綁定了主線程的Looper對象,因此該Handler.sendMessage消息發送給了主線程,而且通過傳入Callback對象得到的handleMessage()回調也是工作在主線程,這就是為什么可以通過在Activity里使用如下方式更新UI而不會導致ANR了:

new Handler( new Handler.Callback() {			
    @Override
    public boolean handleMessage(Message msg) {				
        UpdateUI();
        return false;
    }
});

同理,如果在自定義線程中 new Handler(),則默認情況該Handler()綁定了該線程的Looper對象,因此該Handler.sendMessage消息則是發送給了這個線程,而且通過傳入Callback對象得到的handleMessage()回調也是工作在這個線程,因此,這種情況下的handleMessage()函數中就不能進行UI更新操作了,否則會導致ANR了。

以上是“Android開發中常見問題有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

高淳县| 莱西市| 南召县| 梧州市| 长顺县| 祁东县| 张北县| 潼关县| 临湘市| 虹口区| 鲁甸县| 怀安县| 光泽县| 康乐县| 临汾市| 来凤县| 黎城县| 阿鲁科尔沁旗| 云和县| 盐边县| 融水| 侯马市| 阿荣旗| 萝北县| 磐安县| 吉林省| 鄂尔多斯市| 滁州市| 金湖县| 宁晋县| 白朗县| 佛山市| 义乌市| 航空| 化州市| 商河县| 峨山| 上杭县| 游戏| 夏津县| 旺苍县|