android工程師面試題
Ⅰ Android Kotlin必問面試題:Kotlin協程在工作中有用過嗎
理解協程的目的是,簡化復雜的非同步代碼邏輯,用同步的代碼寫出復雜的非同步代碼邏輯。
考察的知識點包括:kotlin、協程、線程、並發。
考生應該如何回答:
1. 你工作這么些年,對於Kotlin語言協程是什麼,有了解么?
答:雖然對於一些人來說,協程是新的概念,但是協程是一種編程思想,並不局限於特定的語言。kotlinx.coroutines是由JetBrains開發的kotlin協程庫,可以理解為一個線程框架。然而協程不是線程,它基於線程封裝的一套更上層工具庫,我們可以使用協程庫提供的api方便地指定協程中代碼執行的線程、切換線程,但無需接觸線程Thread類。這與Android的AsyncTask或RxJava的Schelers相似,都解決了非同步線程切換的問題。然而,協程通過非阻塞掛起和恢復實現了非同步代碼的同步編寫方式,能夠在一個代碼塊里運行原本運行在不同線程的代碼,看起來就像是同步代碼。
協程運行在線程中,線程運行在進程中,因此協程基於線程封裝。有人會比較協程與線程,問協程是否比線程效率更高。協程並沒有改變代碼運行在線程中的原則,單線程中的協程執行時間並不會比不用協程少。協程解決了因為多線程帶來的編碼上的不便,而非線程本身。
2. 那這樣說的話,協程到底有什麼用?
在Android開發中,通常將耗時操作放在子線程中,並通過回調的方式返回結果後切換主線程更新UI。然而,實際開發中可能遇到並發請求多個介面的需求,需要在所有介面請求完成後再合並處理並更新UI。傳統方法管理多個boolean值或採用單線程循環請求介面,或使用RxJava的zip操作符,但這些方法都存在管理復雜、效率低下或使用復雜的問題。使用協程可以解決這個問題,通過非阻塞掛起和恢復的特性,讓我們可以編寫看起來同步的非同步代碼,徹底去除回調,簡化復雜的非同步代碼邏輯。
通過協程,我們可以編寫看起來同步的非同步代碼,實現復雜的非同步操作邏輯,而無需等待或阻塞主線程,從而提高代碼的可讀性和可維護性。
