Skip to content

Commit 35e73be

Browse files
committed
添加二级缓存
1 parent df149ac commit 35e73be

3 files changed

Lines changed: 38 additions & 36 deletions

File tree

diycode-app/src/main/java/com/gcssloop/diycode/activity/MainActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public void initViews(ViewHolder holder, View root) {
7979
private void initViewPager(ViewHolder holder) {
8080
ViewPager mViewPager = holder.get(R.id.view_pager);
8181
TabLayout mTabLayout = holder.get(R.id.tab_layout);
82-
mViewPager.setOffscreenPageLimit(1); // 防止滑动到第三个页面时,第一个页面被销毁
82+
mViewPager.setOffscreenPageLimit(2); // 防止滑动到第三个页面时,第一个页面被销毁
8383
mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
8484
String[] types = {"Topics", "News", "Sites"};
8585

diycode-app/src/main/java/com/gcssloop/diycode/fragment/NewsListFragment.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public class NewsListFragment extends BaseFragment {
8989
private GcsAdapter<New> mAdapter;
9090
private SwipeRefreshLayout mRefreshLayout;
9191

92+
private boolean isFirstLunch = true;
9293

9394
public static NewsListFragment newInstance() {
9495
Bundle args = new Bundle();
@@ -102,24 +103,22 @@ protected int getLayoutId() {
102103
return R.layout.fragment_recycler_refresh;
103104
}
104105

105-
// 注意:此处实际调用位置在 initViews 之后
106-
@Override
107-
protected void onFirstTimeLaunched() {
108-
mDiycode = Diycode.getSingleInstance();
109-
mDataCache = new DataCache(getContext());
110-
106+
private void loadData() {
111107
// 第一次加载,默认从缓存加载
112108
List<New> news = mDataCache.getNewsList();
113109
if (null != news && news.size() > 0) {
114110
mAdapter.addDatas(news);
115111
mFooter.setText(FOOTER_NORMAL);
116-
mRefreshLayout.setEnabled(true);
117-
mRefreshLayout.setRefreshing(true);
118-
new Handler().postDelayed(new Runnable() { // 延迟 1s,防闪屏
119-
public void run() {
120-
refresh();
121-
}
122-
}, 1000);
112+
if (isFirstLunch){
113+
mRefreshLayout.setEnabled(true);
114+
mRefreshLayout.setRefreshing(true);
115+
new Handler().postDelayed(new Runnable() { // 延迟 1s,防闪屏
116+
public void run() {
117+
refresh();
118+
}
119+
}, 1000);
120+
isFirstLunch = false;
121+
}
123122
} else {
124123
loadMore();
125124
mFooter.setText(FOOTER_LOADING);
@@ -128,6 +127,8 @@ public void run() {
128127

129128
@Override
130129
protected void initViews(ViewHolder holder, View root) {
130+
mDiycode = Diycode.getSingleInstance();
131+
mDataCache = new DataCache(getContext());
131132
mFooter = holder.get(R.id.footer);
132133
initRefreshLayout(holder);
133134
initRecyclerView(getContext(), holder);
@@ -271,6 +272,7 @@ public void onNewsList(GetNewsListEvent event) {
271272
public void onStart() {
272273
super.onStart();
273274
EventBus.getDefault().register(this);
275+
loadData();
274276
}
275277

276278
@Override

diycode-app/src/main/java/com/gcssloop/diycode/utils/DataCache.java

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
package com.gcssloop.diycode.utils;
2424

2525
import android.content.Context;
26+
import android.support.annotation.NonNull;
2627
import android.util.LruCache;
2728

2829
import com.gcssloop.diycode_sdk.api.news.bean.New;
@@ -42,30 +43,39 @@
4243
* 数据缓存工具
4344
*/
4445
public class DataCache {
45-
46-
ACache cache;
47-
LruCache<String, String> mLruCache;
46+
private static int M = 1024 * 1024;
47+
ACache mDiskCache;
48+
LruCache<String, Object> mLruCache;
4849

4950
public DataCache(Context context) {
50-
cache = ACache.get(new File(FileUtil.getExternalCacheDir(context.getApplicationContext(), "diy-data")));
51-
mLruCache = new LruCache<>(3 * 1024);
51+
mDiskCache = ACache.get(new File(FileUtil.getExternalCacheDir(context.getApplicationContext(), "diy-data")));
52+
mLruCache = new LruCache<>(5 * M);
5253
}
5354

5455
public <T extends Serializable> void saveListData(String key, List<T> data) {
5556
ArrayList<T> datas = (ArrayList<T>) data;
56-
cache.put(key, datas, ACache.TIME_WEEK); // 数据缓存时间为 1 周
57+
mLruCache.put(key, datas);
58+
mDiskCache.put(key, datas, ACache.TIME_WEEK); // 数据缓存时间为 1 周
5759
}
5860

59-
public <T extends Serializable> void saveData(String key, T data) {
60-
cache.put(key, data, ACache.TIME_WEEK); // 数据缓存时间为 1 周
61+
public <T extends Serializable> void saveData(@NonNull String key, @NonNull T data) {
62+
mLruCache.put(key, data);
63+
mDiskCache.put(key, data, ACache.TIME_WEEK); // 数据缓存时间为 1 周
6164
}
6265

63-
public <T extends Serializable> T getData(String key) {
64-
return (T) cache.getAsObject(key);
66+
public <T extends Serializable> T getData(@NonNull String key) {
67+
T result = (T) mLruCache.get(key);
68+
if (result == null) {
69+
result = (T) mDiskCache.getAsObject(key);
70+
if (result != null) {
71+
mLruCache.put(key, result);
72+
}
73+
}
74+
return result;
6575
}
6676

6777
public void removeDate(String key) {
68-
cache.remove(key);
78+
mDiskCache.remove(key);
6979
}
7080

7181
public void saveTopicContent(TopicContent content) {
@@ -75,7 +85,6 @@ public void saveTopicContent(TopicContent content) {
7585
preview = preview.substring(0, 100);
7686
}
7787
saveData("topic_content_preview" + content.getId(), preview);
78-
mLruCache.put("topic_content_preview" + content.getId(), preview);
7988
}
8089

8190
public TopicContent getTopicContent(int id) {
@@ -84,16 +93,7 @@ public TopicContent getTopicContent(int id) {
8493

8594
public String getTopicPreview(int id) {
8695
String key = "topic_content_preview" + id;
87-
String result = null;
88-
result = mLruCache.get(key);
89-
if (null != result) {
90-
return result;
91-
}
92-
result = getData(key);
93-
if (null != result) {
94-
mLruCache.put(key, result);
95-
}
96-
return result;
96+
return getData(key);
9797
}
9898

9999
public void saveTopicRepliesList(int topic_id, List<TopicReply> replyList) {

0 commit comments

Comments
 (0)