Daily Digest

每日新聞摘要

2026年04月26日

今日總結

內容會跟隨語言切換。

📝 今日焦點:Android AI 轉向 AICore 共享資源,需用 coroutines、Flow 與 ViewModel 管理模型生命週期,並依裝置能力選型。 📝 今日焦點:Kotlin Weekly 與 JWT/Spring Boot、Android 16 App Functions、Credential Manager 驗證、以及行動可觀測性與上下文補強議題同步更新。 🔧 效能最佳化:BLE 掃描與重連須結合前景服務、PendingIntent、scan filter 與 batch 回報,並以序列化操作、HCI log 及嗅探器定位 GATT_FAILURE。 ✅ 測試與品質:Android 背景限制與權限變更讓 BLE 更易失敗,需妥善處理 Doze、autoConnect、生命週期與 API 相容性,降低連線不穩。

01

Beyond the APK: Mastering Model Lifecycles and AICore in Modern Android Development

Dev.to Kotlin 作者:Programming Central 發布:04-26 10:00

超越 APK:現代 Android 開發中的模型生命週期與 AICore 管理

原生 AI 的重點不只是模型,而是整體協調與管理。

重點摘要

Android AI 已從打包模型轉向由 AICore 管理的系統級共享資源。
AICore 負責下載、驗證、安全儲存、記憶體共享與硬體加速。
StateFlow、coroutines 與 context receivers 可用來整理模型生命週期流程。

Android 裝置端 AI 已不再是把小型模型塞進 APK 的舊模式。面對 Gemini Nano 這類大型模型,應用程式必須把 AI 視為由 AICore 管理的系統級共享資源,由它負責下載、驗證、安全儲存、記憶體與硬體加速。文章將模型生命週期拆成未初始化、下載中、就緒/冷啟動、溫熱與被回收等狀態,並示範如何用 Kotlin 的 coroutines、Flow 與 context receivers 協調流程。此外,也介紹依裝置 RAM 選擇模型版本、以 Repository 與 ViewModel 組織架構,並提醒避免阻塞主執行緒、記憶體洩漏、磁碟空間不足與不當載入模型。

02

How to Keep Your BLE Scan Alive: Overcoming Android 10+ Background Restrictions for Persistent Discovery

Dev.to Kotlin 作者:Ble Advertiser 發布:04-26 10:54

如何讓 BLE 掃描持續運作:在 Android 10+ 背景限制下實現常駐探索

本文說明如何結合 ForegroundService 與使用 PendingIntent 的 BluetoothLeScanner.startScan(),讓現代 Android 上的 BLE 探索更穩定耐久。

重點摘要

Android 10 之後背景 BLE 掃描受到嚴格限制,可能幾分鐘內就被終止。
以 ForegroundService 搭配 PendingIntent 掃描,改由系統代管探索流程。
需妥善處理權限、服務生命週期、掃描過濾條件與藍牙狀態變化。

Android 10 之後,系統對背景執行施加更嚴格限制,傳統 BLE 掃描容易在背景中被中止。文章提出的解法是結合 ForegroundService 與採用 PendingIntent 的 BluetoothLeScanner.startScan(),讓掃描由系統接手,並在有結果時喚醒應用程式。文中逐步說明 Android 10 到 13+ 所需的權限、Manifest 宣告,以及 BroadcastReceiver、前景服務與 Activity 權限申請流程的 Kotlin 範例。同時也建議使用 ScanFilter、低功耗模式、結果批次回報、正確的 PendingIntent 標記,以及藍牙狀態監控,以提升穩定性與省電效果。

03

Conquering Elusive Android BLE `GATT_FAILURE` and Connection Timeouts in Kotlin

Dev.to Kotlin 作者:Ble Advertiser 發布:04-26 11:02

以 Kotlin 攻克 Android BLE 難解的 GATT_FAILURE 與連線逾時

這些不只是小錯誤,而是足以癱瘓連線方案的核心通訊失敗。

重點摘要

GATT_FAILURE 只是泛用錯誤,背後可能是資源耗盡、協定違規或底層堆疊問題。
Android BLE 必須維持每個裝置一個 BluetoothGatt,且所有操作要依序執行。
善用 logcat、HCI snoop log 與正確 close(),才能穩定 BLE 連線。

Android BLE 在開發與少量裝置測試時常可正常運作,但上線後卻可能出現不穩定的 GATT_FAILURE 或連線逾時。文章指出,這些問題多半不是單一錯誤,而是資源耗盡、協定違反、底層藍牙堆疊錯誤或回呼未如期觸發等症狀。作者系統性說明 BLE 狀態流程,強調同一裝置應只維持一個 BluetoothGatt,且讀寫、MTU 等操作必須序列化。除 logcat 外,也建議使用 HCI snoop log 搭配 Wireshark,必要時再用外部 sniffer 深入分析。範例程式則以佇列管理操作並確實釋放資源,提升連線穩定度。

04

Solving Elusive Android BLE Background Reconnection Issues: A Deep Dive into OS Restrictions and Robust Strategies

Dev.to Kotlin 作者:Ble Advertiser 發布:04-26 11:03

解決棘手的 Android BLE 背景重連問題

深入解析系統限制與可靠策略,建立穩定的背景 BLE 連線。

重點摘要

背景重連失敗多半來自 Android 的省電與執行限制。
Foreground Service 搭配 autoConnect=true 是關鍵做法。
PendingIntent 掃描與正確管理 GATT 可提升穩定性。

Android 裝置在背景中 BLE 連線反覆中斷,常見原因不是周邊韌體,而是 Doze、App Standby、背景服務限制與權限變動。文章說明了這些 OS 機制如何抑制掃描與重連,並強調要用 Foreground Service 承載持續性的 BLE 工作。實作上,建議以 BluetoothGatt.connectGatt(..., autoConnect=true) 交由系統在裝置可見時自動重連,必要時用 PendingIntent 進行背景掃描,並妥善管理 BluetoothGatt 生命週期,避免過早 close() 造成重連機制失效。同時也需依 API 版本處理 BLUETOOTH_SCAN、BLUETOOTH_CONNECT、ACCESS_BACKGROUND_LOCATION、POST_NOTIFICATIONS 與 FOREGROUND_SERVICE_CONNECTED_DEVICE 等權限。

05

Navigating Android 12+ BLE Permissions: A Kotlin Developer's Checklist for BLUETOOTH_SCAN, CONNECT, and ADVERTISE

Dev.to Kotlin 作者:Ble Advertiser 發布:04-26 11:04

Android 12 以上 BLE 權限指南:Kotlin 開發者的 BLUETOOTH_SCAN、CONNECT 與 ADVERTISE 檢查清單

Android 12 將掃描、連線與廣播拆分為不同的即時權限,以提供更細緻的隱私控制。

重點摘要

Android 12 以上以 BLUETOOTH_SCAN、BLUETOOTH_CONNECT、BLUETOOTH_ADVERTISE 取代較寬鬆的藍牙權限模型。
僅做裝置探索時,BLUETOOTH_SCAN 一般不再需要 ACCESS_FINE_LOCATION;若要推斷位置則仍需定位權限。
需先在 Manifest 宣告權限,再用 Activity Result API 於適當時機逐項請求。

本文說明 Android 12 以上 BLE 權限的重大變更,協助 Kotlin 開發者正確處理掃描、連線與廣播。作者指出,新的即時權限分為 BLUETOOTH_SCAN、BLUETOOTH_CONNECT 與 BLUETOOTH_ADVERTISE,並說明何時仍需 ACCESS_FINE_LOCATION,特別是當掃描結果被用來推斷實際位置時。文章也示範如何在 AndroidManifest.xml 中宣告權限、為舊版權限設定 maxSdkVersion,並使用 Activity Result API 在執行相應操作前再動態請求。最後強調要分情境請求、獨立檢查藍牙開關狀態,並兼顧舊裝置相容性。

06

Kotlin Weekly #508

Kotlin Weekly 作者: 發布:04-26 10:52

Kotlin Weekly #508

2026 年 4 月 26 日

重點摘要

JetBrains 與 Touchlab 說明 Kotlin Multiplatform 如何透過共享業務邏輯降低總持有成本。
JetBrains 與 LinkedIn Learning 合作推出 Kotlin Professional Certificate。
本期也整理了 Android Studio AI 功能、Compose 更新與多款 Kotlin/Android 新工具。

《Kotlin Weekly #508》刊於 2026 年 4 月 26 日,內容涵蓋 Kotlin Multiplatform、Android 與各式函式庫動態。News 區介紹 JetBrains 與 Touchlab 對 KMP 的觀點,主張透過共享最多 80% 的業務邏輯來降低總持有成本;同時也宣布 Kotlin Professional Certificate 登上 LinkedIn Learning。文章區收錄 koog AI agent、Perfetto 啟動效能分析,並整理 Android Studio、Jetpack Compose 與多個新工具與函式庫。

07

Kotlin Coroutines on Android, Part 2: Dispatchers and withContext

Medium Kotlin 作者:Dev 175 發布:04-26 08:23

Android 上的 Kotlin Coroutines,第 2 部分:Dispatchers 與 withContext

第 1 部分建立了心智模型:coroutines 是由結構化並發管理的輕量、可暫停工作單元。

重點摘要

介紹 dispatchers 在 coroutine 執行中的角色。
說明 withContext 如何切換 coroutine 的上下文。
延續第 1 部分建立的結構化並發心智模型。

本文是 Android 上 Kotlin Coroutines 系列的第 2 部分,承接第 1 部分建立的心智模型。文章將 coroutines 描述為由結構化並發管理的輕量、可暫停工作單元,並把重點放在 dispatchers 與 withContext,說明它們如何影響 coroutine 程式碼的執行位置與上下文切換。這篇內容屬於系列延伸,主要用來銜接概念理解與 Android 上的實作方式。

08

Compose Dialogs From a Service. Finally.

Medium Kotlin 作者:Christophy Barth 發布:04-26 10:10

終於能從 Service 中建立 Compose 對話框

背景服務一直是 Compose 中最奇怪的一角。

重點摘要

Compose 早已可用於 Activity、Wear tile 與 widget。
背景服務一直難以與 Compose 自然結合。
本文聚焦於從 service 建立對話框的可行性。

本文指出,背景服務一直是 Compose 生態中最不順手的一塊。相較於 Activity、Wear tile 或 widget 已能使用 Compose,service 的整合長期受限,讓對話框等 UI 元件難以從背景流程直接建立。文章以此為切入點,說明如何補上這個缺口,讓服務端也能更自然地使用 Compose。

09

The Context Problem in Mobile Dvlpt: Why Traditional Observability Fails, Why AI Alone Cannot Fix it

Medium Kotlin 作者:Michael 發布:04-26 10:22

行動開發中的上下文問題:為何傳統可觀測性失效,以及為何 AI 也無法單獨解決

上下文問題是行動開發的核心挑戰;傳統可觀測性不夠,而 AI 單靠自己也不夠。

重點摘要

行動除錯常缺少足以判斷問題的完整上下文。
傳統可觀測性工具難以涵蓋行動環境的複雜性。
AI 可以輔助分析,但不能取代缺失的上下文。

本文指出,行動開發面臨的核心難題是上下文不足:團隊往往無法取得足夠的周邊資訊來理解錯誤、效能問題或使用者端失敗。傳統可觀測性工具不太適合行動環境的碎片化與複雜性,因此容易漏掉關鍵訊號。作者也提醒,AI 雖然能提供協助,但若輸入的上下文不完整,仍無法單獨解決問題。文章的重點在於:要改善行動除錯,關鍵不是只增加監控或自動化,而是補足更豐富的上下文。

10

Reducing First-Event Publishing Delay With Kafka Producer Warmup

Medium Kotlin 作者:Kuyho Chung 發布:04-26 11:42

透過 Kafka Producer 預熱降低首次事件發佈延遲

我們在使用 Spring 執行服務時,經常會遇到首次回應延遲的情況。

重點摘要

Spring 服務在第一次請求時,常出現比預期更慢的回應。
文章提出可透過 Kafka producer 預熱,降低首次事件發佈延遲。
雖然根因可能不同,但首次延遲是常見問題。

本文指出,Spring 架構的服務在啟動後常會出現首次請求或首次事件回應較慢的情況。文章提到,Kafka producer 預熱是一種可用來降低首次事件發佈延遲的方法。雖然實際根因可能因系統而異,但首次延遲屬於常見現象,會影響服務的即時性與使用體驗。

11

HTTP 403 — When Your Corporate Proxy Decides Gradle Isn’t Welcome

Medium Kotlin 作者:Abhinay 發布:04-26 12:58

HTTP 403——當你的企業代理伺服器決定不歡迎 Gradle

給被擋在討厭開放網路的防火牆後方的 Android 開發者的一份實用指南。

重點摘要

說明 Gradle 下載遭企業代理伺服器阻擋的情況
面向身處嚴格防火牆後的 Android 開發者
以實務排障指南的角度切入問題

這篇文章以 Android 開發者常見的 HTTP 403 問題為主軸,指出在企業代理伺服器或嚴格防火牆環境下,Gradle 可能因無法連上外部網路而被拒絕存取。內容將這類情境視為開發流程中的實際障礙,重點在於協助讀者理解問題通常出在網路路徑與公司網路政策,而不一定是 Gradle 本身。文章整體定位為一份面向受限網路環境的實用排障指南。

12

Implementando JWT em API REST Spring Boot Kotlin

Medium Kotlin 作者:Mateus Schwede 發布:04-26 14:37

在 Spring Boot Kotlin REST API 中實作 JWT

本文將說明 JWT 的概念與結構,並提供一個在 Spring Boot REST 後端中實作 JWT 的實際範例。

重點摘要

介紹 JWT 的概念與結構。
展示 REST API 後端的實作範例。
聚焦 Spring Boot 與 Kotlin。

本文先說明 JWT 的概念與結構,接著以 Spring Boot 與 Kotlin 為基礎,示範如何在 REST 後端中實作 JWT。內容定位為實作導向的教學,重點在於將 JWT 應用於網頁 API 的認證流程,並以實際後端案例呈現,而非僅停留在理論介紹。

13

[Android] Building Android 16’s App Functions | Game-Changer for AI Assistant Control

Medium Kotlin 作者:Shubham Kumar Gupta 發布:04-26 14:40

【Android】打造 Android 16 的 App Functions|AI 助理控制的遊戲規則改變者

概覽

重點摘要

文章介紹 Android 16 的 App Functions 概念。
標題指出此功能對 AI 助理控制具有重要意義。
目前提供的內文僅有簡短概覽與延伸閱讀連結。

目前提供的內文非常有限,只有一段概覽與「繼續閱讀」的提示。從標題判斷,文章主題是 Android 16 的 App Functions,以及它如何改變 AI 助理控制應用程式的方式。不過,現有文字沒有提供具體技術說明、實作步驟或功能細節,因此無法進一步整理出更完整的內容,只能確認文章聚焦於這項新功能及其潛在影響。

14

I didn’t take attendance seriously… until it cost me.

Medium Kotlin 作者:Sanket Jha 發布:04-26 05:47

我沒把出席當回事……直到它讓我付出代價

繼續在 Medium 閱讀 »

重點摘要

原文除 Medium 引導語外,未提供完整內容。
標題暗示作者從忽視出席規定中得到教訓。
依目前文字無法確認更多具體事實。

目前提供的內容只有 Medium 的導讀文字,未包含文章正文,因此無法忠實還原完整故事。僅從標題可推知,文章應是作者分享自己曾輕忽出席的重要性,最後因此承受了某種後果或損失。由於缺少內文,若再延伸細節都可能失真。

15

Streamlining User Journeys: Verified Email via Android’s Credential Manager

Medium Kotlin 作者:Siva 發布:04-26 06:53

簡化使用者流程:透過 Android Credential Manager 驗證電子郵件

透過 Android 原生的一鍵式身分宣告,消除 OTP 摩擦並提升轉換率。

重點摘要

降低以 OTP 為主的驗證摩擦
運用 Android Credential Manager 進行原生身分宣告
以一鍵驗證提升轉換率

本文介紹如何在 Android 上利用 Credential Manager 進行電子郵件驗證,目標是以原生的一鍵式身分宣告取代傳統 OTP 流程。這種做法可減少使用者在驗證步驟中的摩擦,讓註冊與登入更順暢,同時有助於提升轉換率,為 Android 應用帶來更快速、自然的驗證體驗。