首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Activity 與 Service 通訊:綁定服務 vs 全域靜態變數

     編輯:程式設計綜合問答

場景分析

Socket 客戶端實例化於登入階段,需在多個 Activity 中共用發送/接收方法。若每個 Activity 都綁定 Service 過於繁瑣,且跨進程綁定需 AIDL。

方案比較

方案優點缺點
綁定服務生命週期受系統管理、跨進程隔離、官方推薦樣板碼多、每個 Activity 需綁定/解綁
本地服務 + 介面回呼同進程、無 IPC 開銷、可單例模式持有 Socket進程死掉服務也會死、需處理重連
Application 單例持有 Socket最簡單、全域存取、無綁定開銷記憶體洩漏風險、進程回收時需妥善關閉、難以單元測試
EventBus / LiveData + Repository解耦、生命週期感知、易測試需引入庫、學習成本

推薦架構

  1. 建立 SocketRepository 單例(或由 Hilt/Koin 注入),持有 Socket 連線與重連邏輯。
  2. 暴露 suspend fun send(cmd)、Flow<Message> receive() 供 UI 層收集。
  3. Service 僅作為前台服務維持進程存活,不直接持有 Socket 邏輯。
  4. 若需跨進程,再引入 AIDL 或 Messenger。

全域靜態變數風險提醒

public static SocketClient client; 會導致:多執行緒並發修改無同步、記憶體洩漏(Context 持有)、單元測試無法 Mock、進程回收後重建時狀態不一致。強烈不建議在生產專案使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved