안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
하이브리드 앱 개발중에 성능을 좀 올리려고 앱캐쉬를 넣어서 테스트중입니다.
각종 가이드 문서에 있는대로, (http://xguru.net/621 등 참고하여)
cache.man 파일을 만들어서 이미지파일을 CACHE: 항목에 넣었구요,
man 파일의 mime-type 을 text/cache-manifest 로 설정해주었습니다.
문제는 구글 크롬에서는 제대로 캐싱을 하는데, 단말로만 가면 에러 이벤트가 떨어진다는게 문제입니다.
다음은 manifest 파일입니다.
CACHE MANIFEST # manifest version v0.1 CACHE: ./programs.png ./video.png NETWORK: *
요건 단말에서 webview 설정한거구요.
getSettings().setAppCacheEnabled(true);
getSettings().setDomStorageEnabled(true);
getSettings().setPluginsEnabled(true);
getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);저 위에 setCacheMode 는 LOAD_NORMAL 로 해도, NO_CACHE 로 해도 결과는 다 똑같더군요.
html 파일에서 이벤트 로그 출력은
http://jonathanstark.com/blog/2009/09/27/debugging-html-5-offline-application-cache/
이 사이트 참조했습니다.
var cacheStatusValues = [];
cacheStatusValues[0] = 'uncached';
cacheStatusValues[1] = 'idle';
cacheStatusValues[2] = 'checking';
cacheStatusValues[3] = 'downloading';
cacheStatusValues[4] = 'updateready';
cacheStatusValues[5] = 'obsolete';
var cache = window.applicationCache;
cache.addEventListener('cached', logEvent, false);
cache.addEventListener('checking', logEvent, false);
cache.addEventListener('downloading', logEvent, false);
cache.addEventListener('error', logEvent, false);
cache.addEventListener('noupdate', logEvent, false);
cache.addEventListener('obsolete', logEvent, false);
cache.addEventListener('progress', logEvent, false);
cache.addEventListener('updateready', logEvent, false);
function logEvent(e) {
var online, status, type, message;
online = (navigator.onLine) ? 'yes' : 'no';
status = cacheStatusValues[cache.status];
type = e.type;
message = 'online: ' + online;
message+= ', event: ' + type;
message+= ', status: ' + status;
if (type == 'error' && navigator.onLine) {
message+= ' (prolly a syntax error in manifest)';
}
console.log(message);
}
window.applicationCache.addEventListener(
'updateready',
function(){
window.applicationCache.swapCache();
console.log('swap cache has been called');
},
false
);마지막으로 단말에서 app cache 이벤트 로그입니다.
[cache Resource] app cache support! [cache Resource] DOWNLOADING [cache Resource] event online: yes, event: checking, status: uncached [cache Resource] event online: yes, event: downloading, status: uncached [cache Resource] event online: yes, event: progress, status: uncached [cache Resource] event online: yes, event: progress, status: uncached [cache Resource] event online: yes, event: error, status: uncached (prolly a syntax error in manifest)
이렇게 다운로드는 하는거같은데 뭔가 진행하다가 마지막에 error 가 나서 항상 uncached 상태가 되어 버립니다.
요거 좀 해보신 분들 도움좀 부탁드립니다.
감사합니다.




해결은 아니고.. 결과는 본듯 하네요.
이것저것 바꿔서 하다보니 에러도 발생하도 뭐.. 그랬는데요.
1. manifest 파일의 파일목록에서 팡리명이 틀렸다던가, 경로가 틀려서 못읽는 파일이 있으면, error event 가 오는거였습니다.
2. 페이지 redirection 을 하는 경우에는 cache 가 안되네요.
처음 페이지 로딩을 하면 uncached 상태에서 리소스를 다운로드 받고,
두번째로 페이지 로딩을 하게되면 cached 상태 + noupdate 이벤트가 발생을 하는게 정상인데
접속 경로가 xx.co.kr/target.html 과 같이 페이지가 정확히 명시되어있지 않고, 리다이렉션(포워딩??? 요부분은 정확히 모르겠네요. 여튼 페이지 이동되는 경우)되는 경우에는 error event 가 안왔음에도 불구하고, 항상 uncached 상태가 되는군요.
정말 페이지가 이동하는 경우에는 이렇게 캐시를 사용하지 못하는건지 아직 의심스럽기는 하지만,
테스트결과는 그렇습니다.
xxx.co.kr/target.html 은 캐싱이 잘 되는데,
xxx.co.kr/target.do?~~~ 이렇게 사용하는 경우는 캐싱이 안되네요.
혹시 이부분에 대해 아시는분 있으면 코멘트 좀 해주시면 감사하겠습니다.