美好的一天,對於相當長的文章感到抱歉。這更像是一個設計決定而非其他任何事情。我有一個包含4個片段的活動。現在我通過slideMenu切換片段。 每個片段調用一個webservices並獲取一個AsyncTask的JSONObject結果。我正在尋找一種結構,我必須緩存每個片段的每個JSONObject結果 。當用戶在片段之間切換時,它檢查一段時間是否已經過期並且相應地起作用在碎片中處理web服務調用和緩存數據
如果緩存的時間已經過期,則再次重新加載網絡請求。 如果不是,請使用緩存的JSONObject結果並顯示給用戶。
這意味着,如果我有一個到期時間等6個小時或者更確切地說,數據從後端更新每隔6小時,我應該從web服務通過的AsyncTask 每6小時一次等次剛使用高速緩存的值只請求代替。
我目前的實現 1.通過擴展Application類來爲每個片段第一次加載一組全局布爾變量。
public class MyApp extends Application {
private boolean First_load_frag1 = true;
private boolean First_load_frag2= true;
public void setLoadFrag1(boolean value){
First_load_frag1 = value;
}
public boolean getLoadFrag1(){
return First_load_frag1;
}
}
在我的片段,我將它們設置爲true的onCreate(),用它來確定是否請求第一次,然後將其設置爲false,這樣我就不必了。 然後在我的片段OnResume()我檢查看是否cached_time已過期或沒有。我做這樣的事情
@Override public void onResume(){ super.onResume(); public final static MINUTE_MILLIS = 60000;
Calendar cal = Calendar.getInstance(); int mins = (int) ((cal.getTimeInMillis()/MINUTE_MILLIS) - (cached_timer/MINUTE_MILLIS); if(mins > 180){ Toast.makeText(getActivity(), "on resume refresh data", Toast.LENGTH_LONG).show(); requestService(); //this sends a request to the webservice } else { cached_result = manager.getCachedJSONResult(CACHED_RESULT); if(cached_result != null){ Toast.makeText(getActivity(), "on resume cached data", Toast.LENGTH_LONG).show(); loadCachedResult(cached_result); } } }
這感覺就像處理這種情況給我的一種凌亂的方式。考慮到應用程序崩潰和活動生命週期,這是做這樣的oris的一個很好的解決方案那裏有一個更優雅的方式,我可以做到這一點?每一個輸入將非常感激。由於