2013-07-11 2 views
1

웹 서비스의 데이터로 무한한 목록보기를 채우고 있습니다. 데이터는 앱에서 POST 요청에 대한 응답으로 가져옵니다. 이러한 데이터를 캐시하여 사용자가 목록을 위아래로 스크롤 할 때마다 네트워크 호출이 수행되지 않도록하는 가장 좋은 방법은 무엇입니까? 감사합니다.웹 서비스 응답을 로컬 캐시하는 모범 사례

답변

3

LruCache 클래스를 확인하거나 Google에서 개발 한 Android Volley 프레임 워크를 확인하는 것이 좋습니다.

+0

캐시가있는 발리의 사용법을 보여주는 예가 있습니까? 예를 들어, 캐시 크기는 어떻게 설정됩니까? 요청을 강제로 캐시를 사용하지 않게하려면 어떻게해야합니까? –

0

이전에는 이렇게하기 위해 네트워크 요청 계층에 캐시 체계를 추가하여 API 호출자에게 캐시를 투명하게 만들었습니다. 캐시는 x 분마다 만료됩니다. 캐시는 SharedPreferences을 사용하여 지속되므로 앱이 다시 시작될 때 사용할 수 있습니다. 예를 들어, API 호출이 될 수 있습니다

List<Item> items = server.getListItems(int page);

내부 getListItems() 유효한 캐시가 있는지 캐시를 확인합니다. 그렇다면 캐시의 항목을 반환합니다. 그렇지 않으면 네트워크 호출을 수행합니다. 즉시 만료 된 캐시를 반환 한 다음 네트워크 호출을하고 업데이트를 지원하기 때문에 새로운 결과가 돌아 왔을 때

는 실제로 API는 조금 더 복잡 :이 계획에서

server.getListItems(int page, new ResultListener<List<Item>>() { 
    public void onResult(List<Item> items) { 
     ... 
    } 
}); 

때 캐시 만료 된 onResult()는 두 번 호출됩니다. 한 번은 만료 된 캐시로, 한 번은 새로운 결과로 호출합니다.

행운을 빈다.

+0

나는이 아이디어를 줄 지어다. 아키텍처에 대해 좀 더 설명하고 조금 더 의사 코드를 제공하십시오. –

0

시도 Picasso 광장에서 이미지 다운로드 및 캐싱을위한 또 하나의 강력한 라이브러리. 캐싱에 대한 모든 사항은 귀하에게 달려 있습니다. 그러나 LruCache를 사용하는 것으로 여전히 구성된 경우 앱에 특별한 양의 메모리를 할당하는 것을 고려하십시오. 그렇지 않으면 앱에 메모리가 손상됩니다.

관련 문제