搜尋

首頁  >  問答  >  主體

Android中PopupWindow是阻塞线程的具体是什么意思?

PHPzPHPz2772 天前594

全部回覆(6)我來回復

  • 大家讲道理

    大家讲道理2017-04-17 16:03:37

    PopupWindow中不包含Window對象,它會自行管理控制樹與視窗服務建立雙向連線。
    PopupWindow的出現不像AlertDialog是在固定的位置出現的它是要依賴與錨點控制對象的位置,即界面中某個控件的位置,在構造並展示彈出窗口前需要保證錨點控件與窗口管理服務建立聯繫,視窗的連接的建立是非同步過程。
    也就是說當Activity.onCreate等函式呼叫時,介面與視窗服務的雙向連線還沒有建立,如果此時建構彈出視窗會拋出異常,會阻塞執行緒。
    可以透過View.post()函數傳送過來的訊息放入靜態佇列中,當通訊建立後在從佇列中取出執行。

    回覆
    0
  • 迷茫

    迷茫2017-04-17 16:03:37

    個人認為描述網路資料不準確
    實際上兩種方式都不阻塞子執行緒的執行,子執行緒該幹嘛還是幹嘛
    主執行緒理論上都「阻塞」住了,只不過一個是其他區域可以接收響應touch事件,一個不可以罷了
    不可以接收響應touch事件的估計就被描述成阻塞線程的了

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 16:03:37

    其實我也不太理解…因為PopupWindow反而比AlertDialog要更不影響主介面使用。例如Spinner在以前的android版本就是透過AlertDialog的形式完成,會在手機螢幕中央跳出對話框,而此時你只能操作對話框的內容,除非對話框消失了。而現在版本的Spinner就是PopupWindow實現的,你會發現,PopupWindow顯示外,可以點選介面其他位置,也能觸發事件。

    至於你的猜想,我認為應該是不對的,或者網路上的說法有誤區,或者描述有歧義。

    回覆
    0
  • 迷茫

    迷茫2017-04-17 16:03:37

    這種事情就是自己做實驗啊,不過我覺得你被誤導了

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 16:03:37

    Popupwindow可以透過設定回應區域外事件,我看不不太明白這兩個連結。

    回覆
    0
  • PHPz

    PHPz2017-04-17 16:03:37

    不對的。不存在阻塞線這種說法

    回覆
    0
  • 取消回覆