iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
Mobile Development

Android 新手的 30 天進化論:從初學者到小專案開發者系列 第 27

Day 27. SharedPrefsManager 與 LoginData 比較與對比

  • 分享至 

  • xImage
  •  

類別簡介

1. LoginData

  • 用途:用來暫時保存單一使用者(或一組資料)的登入資訊,通常只在App運作期間有效,App關掉就消失。
  • 設計模式:單例模式(Singleton),全程只有一個實例。
  • 資料儲存結構:保存單一用戶的 username、email、password,外加一個可自定義的 dataArrayList<HashMap<String,String>>)。
  • 常見用途:暫存目前正在登入/操作的使用者資料(Session資料)。

2. SharedPrefsManager

  • 用途:封裝 Android 的 SharedPreferences 機制,用來永久儲存多個用戶資料(如用戶列表),即使 App 關閉或手機重開機,資料仍然保留。
  • 設計模式:非單例,需傳入 Context 建立實例。
  • 資料儲存結構:以 JSONArray 儲存多筆用戶(每個用戶為一個 JSONObject)。
  • 常見用途:多用戶註冊/登入系統。

功能細節比較

功能 LoginData SharedPrefsManager
資料保存範圍 暫時(記憶體,App 關閉即消失) 永久(寫入裝置儲存)
多用戶管理 不行(僅單一用戶) 可以(JSONArray)
用戶查詢 不支援(只記錄當前) 支援(搜尋 username/email)
用戶註冊驗證 不支援 支援(檢查重複 username/email)
登入驗證 不支援 支援(比對 username, email, password)
移除/清空資料 可重設欄位,但非設計重點 支援(clear)
資料格式 Java 物件欄位、ArrayList JSON(JSONArray, JSONObject)

設計模式差異

  • LoginData:單例模式,強調全域唯一性,僅儲存「目前」的使用者資訊,設計目的是方便全App取得同一份暫存資料(如 session 使用者)。
  • SharedPrefsManager:物件導向封裝,操作 Android 持久化儲存,強調多用戶、多資料的維護,資料長存。

適用場景舉例

  • LoginData

    • 記錄 App 啟動後目前登入的使用者
    • App 不需保存多筆用戶,只需當下使用者資料
    • 使用者登出時只需清空欄位,不需操作儲存
  • SharedPrefsManager

    • 註冊新用戶
    • 登入多帳號選擇
    • 需要查詢、列出所有用戶
    • 用戶資料長久保存

實作差異分析

LoginData(記憶體暫存單一用戶)

  • 單例設計,保證全程只有一份資料。
  • 資料存在於記憶體,App 關閉就消失。
  • 只記錄單一用戶資訊,雖有 ArrayList<HashMap> 但通常不是用於多用戶管理。
  • 無註冊、查重等功能。

SharedPrefsManager(持久化多用戶)

  • 需傳入 Context
  • 使用 JSONArray/JSONObject 儲存多用戶結構。
  • 提供註冊、查重、登入驗證、查詢所有用戶、清空等完整功能。
  • 直接與 Android 儲存機制互動。

總結

  • 如果你只需要在 App 執行期間暫時保存單一使用者資料(如 session)、方便全域存取,用 LoginData 單例即可。
  • 如果你需要管理多用戶、長期保存用戶資料,並提供註冊、登入、查詢等完整功能,應該用 SharedPrefsManager

上一篇
Day 26.APS架構(SharedPreferences)
下一篇
Day 28.Git版本控管
系列文
Android 新手的 30 天進化論:從初學者到小專案開發者30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言