中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

福州市| 益阳市| 阿尔山市| 上蔡县| 牙克石市| 吴忠市| 宾川县| 清苑县| 吐鲁番市| 云霄县| 同心县| 中牟县| 普洱| 云和县| 仁寿县| 泰宁县| 盐源县| 广昌县| 茌平县| 崇礼县| 浦城县| 周宁县| 禹城市| 蓬莱市| 灌南县| 德惠市| 铜陵市| 都昌县| 昆山市| 永吉县| 新竹市| 庆安县| 临安市| 聊城市| 衡阳县| 辽源市| 白城市| 开封市| 铁岭县| 黄陵县| 凤台县|