激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

Android UI界面刷新與交互

發(fā)布時間:2024-01-18 10:08:32 瀏覽量:181次

一、數(shù)據(jù)請求與UI界面更新事項

1.1 UI線程

Android在啟動應(yīng)用程序的時候,會為應(yīng)用創(chuàng)建一個Main線程,這個線程負責將事件分派給相應(yīng)用戶接口的widget,其中包括drawing事件。除了事件分派之外,Main線程還負責應(yīng)用與Android UI組件(例如, android.widget 和android.view 包)進行交互,因此Main 線程有時候也被稱為UI線程。

1.2 ANR

Application Not Response簡稱ANR,程序無響應(yīng)。

Android不會為每個組件實例創(chuàng)建單獨的線程。運行于同一進程的所有組件均在 UI 線程(Main)中實例化,并且對每個組件的系統(tǒng)調(diào)用均由該線程進行分派。這樣一來,響應(yīng)系統(tǒng)回調(diào)的方法(例如生命周期回調(diào)方法)始終在進程的UI線程中運行。

如果應(yīng)用在響應(yīng)用戶的操作的時候,在UI線程中執(zhí)行了大量的耗時操作,比方說網(wǎng)絡(luò)訪問或數(shù)據(jù)庫查詢。這樣做的后果勢必會阻塞整個UI。一旦UI線程被阻塞,將無法分派任何事件,包括繪圖事件。

如果UI線程被阻塞超過一定時間(目前 5 秒鐘),就會出現(xiàn)我們常說的ANR。

1.3 如何在子線程中訪問UI資源

既然ANR是由于在UI線程中執(zhí)行大量耗時的操作引起的,那么我們在主線程中新建一個worker線程問題不就解決了么?事實上,這種方式的確能夠解決一些問題,但是對于UI來說就不是那么靈光了,因為Android UI 線程并不是線程安全的。

1.3.1 線程安全問題

當程序中存在多個線程,如果多個線程都要訪問相同的公共的數(shù)據(jù)或者資源,就會產(chǎn)生線程安全為題。如果不解決線程安全問題,公共數(shù)據(jù)或者資源就會變得紊亂,影響正常的業(yè)務(wù)邏輯開發(fā)。

1.3.2 線程安全的解決方法

要解決多線程訪問共享資源的安全問題,可以通過加鎖機制進行解決。常見的加鎖機制有:互斥鎖,讀寫鎖等方式。加鎖后解決了線程安全問題,但是因為涉及到上鎖,釋放鎖的操作,消耗資源,因此加鎖會降低程序的運行效率。

綜上,當遇到多線程執(zhí)行時:不加鎖,會存在線程安全問題;加了所,解決線程安全問題,影響效率。

1.3.3 Android系統(tǒng)的方案

因為線程安全性能較差,線程不安全性能較好,Android中為了提高UI的繪制效率,保證渲染效果,選擇了線程不安全。因為線程不安全帶來的問題就是“不安全”,所以Android設(shè)計主線程為單線程模型,只能在UI線程中操作UI界面。

二、UI界面刷新方法和注意事項

在Android開發(fā)過程中需要注意兩點:

  • 1.不要阻塞主線程
  • 2.不要在其他線程調(diào)用UI操作方法

如果子線程需要來修改用戶界面,就必須先通知主線程,主線程來幫助完成 。

針對不能再線程中更新UI的問題,Android提供了三種在線程中更新UI的方式來解決這一問題:

  • Activity.runOnUiThread(Runnable):activity中存在的方法。
  • View.post(Runnable):view基類存在的方法。
  • View.postDelayed(Runnable, long):view基類包含的方法,與post相似,多一個long參數(shù)。

轉(zhuǎn)自:知乎Davie

熱門課程推薦

熱門資訊

請綁定手機號

x

同學您好!

您已成功報名0元試學活動,老師會在第一時間與您取得聯(lián)系,請保持電話暢通!
確定