2014-03-30 57 views
0

我的應用程序包括以下活動決定何時讀取網絡數據VS時從緩存

  1. 活動A的閱讀 - >連接到Web服務器,並獲得用戶的列表。它還會在數據庫中緩存該列表,以便提供離線訪問以及不向服務器發出重複的http請求。

  2. 單擊活動A中的項目會顯示活動B,其中包含與用戶有關的信息。它也被緩存在數據庫中。

目前,我決定要請求到服務器獲取用戶列表只有當沒有數據存在於數據庫中,或者如果活動A的onCreate方法被調用。下面是它

@Override 
    protected void onResume() { 
    super.onResume(); 
    dbHelper = new DatabaseHelper(this); 
    int numOfUsers = dbHelper.numOfUsers(); //Retrieve the count of users 
    if (numOfUsers <= 0 || isOnCreateCalled) { 
     // retrieve the list of users from the server 
     // Update the database with the new values 
    } else { 
     // retrieve the list of users from the database 
    } 
    } 

的代碼片段類似的方法被用於緩存存在於活動B.與用戶相關的數據

我想知道有沒有什麼比這個簡單的方法更好的戰略決定何時從網絡讀取數據並使緩存的數據庫數據無效,與何時從緩存中讀取

在此先感謝。

回答

0

這個問題的答案將取決於用例,但這裏的問題是可以向用戶顯示陳舊的數據,這有多重要?如果它不那麼重要,那麼你的工作很好。如果您想要一個更強大的策略,我會推薦使用GCM,Google雲消息傳遞。使用GCM,當有新的數據時,您的服務器可以向您發送「發癢」。然後,您的應用可以響應「癢癢」並從服務器獲取所有最新數據。關於這一點的好處是,即使用戶沒有運行應用程序,也可以使數據庫保持最新狀態。

0

我不確定這種功能是否內置。有像Volley這樣的庫會根據您設置的參數緩存網絡I/O。但是,最好的辦法可能是構建自己的解決方案,使用HTTP標頭行,Entity Tags等。也許您總是可以向服務器請求一些微小的序列化數據,比較結果並確定從那裏是否提出額外要求。

簡答:有很多種方法!

相關問題