1.【模擬面試追問|穩定性與記憶體】 秤重畫面這樣接磅秤的讀值:
// ViewModel
val reading: StateFlow<WeightReading?> = scaleDevice.readings
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5_000), null)
// Composable
val reading by viewModel.reading.collectAsStateWithLifecycle()
readings 是用 callbackFlow 包的 BLE 掃描:有人收集就掃描,沒人收集就停止。面試官依序問下面幾個情境,每個都要回答兩件事:掃描會不會停?如果會停,什麼時候停?
接著追問:
collectAsStateWithLifecycle() 換成 collectAsState(),哪幾個情境的答案會變?5_000 改成 0 呢?我的回答:
2.【預測再驗證|平台能力】 App 的 minSdk 是 26。藍牙權限的宣告方式和舊 App 一樣:
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
磅秤只靠 BLE 廣播送出讀值,App 不和它連線。先預測下面三種情況收不收得到讀值:收得到、收不到但會報錯,還是收不到也不報錯?再查 Android 官方文件或用實機驗證。
最後一題:秤重畫面在開始掃描前,要檢查哪些條件?列出來,並寫出每個條件不滿足時,畫面要顯示什麼、按鈕要帶配送員去哪裡。
我的回答:
(待補充)