簡體   English   中英

我可以將多個線程同時發布到 UI 嗎?

[英]Can I have multiple threads post to the UI Simultaneously?

我正在使用 Java 創建我的第一個 Android 應用程序。 在 onCreate 我有許多方法可以設置 cardViews 的大小/位置、文本大小、背景圖像等。 由於前期工作量很大,當我第一次打開我的應用程序時,它需要幾秒鍾才能加載。

我正在考慮將工作分配給可以同時運行的多個后台線程,以加快應用程序的初始設置。 但是,我可以同時運行多個線程來在主 UI 上發布信息嗎?

例如:我可以在 onCreate 啟動 threadA、threadB 和 threadC - threadA 為主 UI 上的 210 個 textView 分配文本的大小/顏色,threadB 在主 UI 上分配 20 個 cardView 的長度/寬度,threadC 分配 x/y 位置主 UI 上的 20 個 cardViews。

一次從這么多后台線程向主 UI 提供如此多的內容,我是在招惹災難嗎? 像凍結/應用程序沒有響應問題? 這種方法會不會有問題?

UI(主)線程是同步的。 如果您有后台線程,則應在更改 UI 之前將數據發布到 UI 線程,此時所有調用都是同步的。 如果您嘗試從主線程以外的線程更新 UI 元素,應用程序可能會崩潰/凍結。

這是一個將后台線程設置為 UI (Main) 線程的可運行示例。 請注意,“應用程序”變量是上下文。 研究 Android View Model、LiveData 和 Observers 以獲取其他示例。

if (application != null && object != null){
        Handler mainHandler = new Handler(application.getMainLooper());
        Runnable myRunnable = () -> {
            tokenLiveData.setValue(object);
        };
        mainHandler.post(myRunnable);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM