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

Android 工具類設計選型:靜態方法優於單例模式,避免 Context 洩漏與生命周期綁定風險

     編輯:程式設計疑難解答

對比分析

維度靜態工具類單例模式
內存洩漏風險無(不持有引用)高(若持有 Context/Activity 引用)
生命周期類加載即存在,進程結束釋放需手動控制,易忘釋放
線程安全無狀態方法天然安全需雙重檢查鎖/靜態內部類實現
可測試性難 Mock(PowerMock 可解)易替換實現(接口+依賴注入)
擴展性僅靜態方法,無繼承多態可實現接口,支持多態替換

推薦:優先使用靜態工具類


public final class StringUtils {
    private StringUtils() {} // 防實例化
    public static boolean isEmpty(String s) { return s == null || s.trim().isEmpty(); }
    public static String maskPhone(String phone) { ... }
}

單例適用場景

  • 需維護狀態(如緩存管理器、網絡請求隊列)。
  • 需實現接口供依賴注入(如 Repository 單例)。
  • 需延遲初始化昂貴資源(如數據庫連接池)。

單例安全模板(Application 級生命周期)


public class AppConfig {
    private static volatile AppConfig instance;
    private final Context appContext;
    private AppConfig(Context context) { this.appContext = context.getApplicationContext(); }
    public static AppConfig getInstance(Context context) {
        if (instance == null) synchronized (AppConfig.class) {
            if (instance == null) instance = new AppConfig(context);
        }
        return instance;
    }
    // 持有 Application Context,安全無洩漏
}

結論

Android 中無狀態工具方法首選 static;有狀態/需生命周期管理才考慮單例,且**只持有 Application Context**。

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