在工具類(非 Activity/Service)使用 `Context` 時頻繁遇到 `NullPointerException`。
根本原因
工具類無生命週期,若靜態欄位持有 `Context` 易導致記憶體洩漏;若未傳入則為 `null`。
最佳實務
- 方法參數傳遞:每個需 Context 的公共方法加參數 `Context context`,調用處傳 `Activity.this` 或 `getApplicationContext()`。
public static void showToast(Context ctx, String msg) {
Toast.makeText(ctx.getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
}
- 單例持有 Application Context:若工具類需長期使用(如資料庫、SharedPreferences),在 `Application.onCreate()` 初始化時 `MyUtil.init(getApplicationContext())`,內部靜態保存 `applicationContext`。
- 嚴禁持有 Activity Context:會阻礙 Activity 回收,導致洩漏。
參考詳解:Android Context 正確用法