簡體   English   中英

Android Studio Java 線程

[英]Android Studio Java Threads

我在 Android Studio 中閱讀了線程,我想問一些問題。 我的應用程序中是否必須有線程以避免延遲,還是只有在您制作非常大且消耗性的應用程序時才必須使用線程? 我問這個是因為我的應用程序幾乎沒有延遲,我想知道這是否是因為我沒有使用線程。 我不認為這是因為我做了無用的事情,我對此非常警惕。

線程是構建任何大型應用程序的重要組成部分。 例如,假設您有一行代碼執行一些需要一些時間才能完成的工作單元,例如

...
// takes 500ms to complete could be a network operation/could be accessing camera, 
// initializing recorder etc. (Initalizing recorder takes 100ms most of the time)
   doSomeTimeIntensiveTask(); 
...

在這種情況下,您需要在不同的線程上而不是在 UI/MAIN 線程上執行此任務,因為對於使用該應用程序的最終用戶,如果您要在 UI/MAIN 線程上執行此任務,那么他/她會注意到時間延遲是一種口吃/滯后的體驗,這通常會導致糟糕的 UI 體驗。

此外,還有一些任務,例如發出 HTTP 請求,在這種情況下需要不確定的時間才能實際完成,如果這些任務是在 UI/MAIN 線程上執行的,那么應用程序將一直卡在任務完成之前,這有時會導致android 操作系統顯示彈出消息,如the application doesn't seem to be responding do you want to force close the app? 或一些類似的消息,這又是糟糕的用戶體驗。

因此,在您的情況下,我會嘗試准確確定是哪一段代碼導致了我的 UI/MAIN 線程中的延遲,並將該部分代碼放在單獨的線程中並編寫回調以繼續正確執行。

沒有更多的信息,任何人都不可能以任何合理的方式回答這個問題。

但是,一般來說,創建額外線程(超出框架中已經使用的線程)的主要原因是,如果您正在執行繁重的操作,例如 I/O(重讀/寫或 http)、圖形或非常復雜的計算.

查看Processes and ThreadsAsyncTask

簡要引用與此問題最相關的部分:

當您的應用程序執行大量工作以響應用戶交互時,除非您正確實施應用程序,否則這種單線程模型可能會產生較差的性能。 具體來說,如果一切都發生在 UI 線程中,執行網絡訪問或數據庫查詢等長時間操作將阻塞整個 UI。 當線程被阻塞時,不能調度任何事件,包括繪圖事件。 從用戶的角度來看,應用程序似乎掛起。 更糟糕的是,如果 UI 線程被阻塞超過幾秒鍾(目前大約 5 秒),用戶將看到臭名昭著的“應用程序無響應”(ANR)對話框。 如果用戶不滿意,那么用戶可能會決定退出您的應用程序並卸載它。

暫無
暫無

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

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