안드로이드 개발 질문/답변
(글 수 45,052)
runOnUiThread(new Runnable() {
public void run() {
// UI에서 처리 할 일(프로그래스바)
DIR = new File(Environment.getDataDirectory().getAbsolutePath() + "/data/" + getPackageName() + "/databases");
// 여러 DB를 받아 오기 위한 for문
for (i = 1;i<=2;i++) {
DOWN_URL = "http://cfs.tistory.com/custom/blog/142/1426130/skin/images/gdpedia_" + i + ".db";
FILE_TARGET = new File(Environment.getDataDirectory().getAbsolutePath() + "/data/" + getPackageName() + "/databases/gdpedia_" + i + ".db");
handler.post(new Runnable() {
public void run() {
// 폴더가 없을시에 만들기
if (!DIR.exists()) {
DIR.mkdir();
}
// 폴더가 없을 시에 만들기 끝
// DB다운로드
URL url = null;
InputStream in = null;
FileOutputStream out = null;
int ch=0;
try {
url = new URL("DOWN_URL);
in = url.openStream();
out = new FileOutputStream(FILE_TARGET);
while((ch=in.read()) !=-1) {
out.write(ch);
}
in.close();
out.close();
} catch(Exception e) {
e.printStackTrace();
}// DB 다운로드 끝
}
});// 핸들러 쓰레드 끝
}// 여러 DB를 받아 오기 위한 for문 끝
}
});// UI쓰레드 끝
선언 문제 없구요 질문1 이렇게 돌렸는데 i가 2일때의 파일만 받아지더라구요 무슨 문제일까요? 질문2 제 생각엔 i가 1일때 쓰레드가 돌다가 i가 2로 가버려서 i가 1일때의 일을 못끝내고 2로 되버리는 것 같은데 어떻게 해결해야 할까요?
타겟은 SDK 9 이하 입니다.
간단하게 훓어 봤을때 내린 결론은
DownURL이 for문 1번째 돌때의의 핸들러가 수행하는동안 2번째가 수행되면서 값을 변경시켜 버리기 때문인거 같네요.
간단한 방법은 handler.post(new Runnable(){ run(){}}을 지우고 내부것을 그냥 for문안에서 하면 될거 같아보이네요.
(UI 스레드라고 돼어있는데 Runnable로 실행되고있다면 UI스레드와는 별개로 돌지 않나요?)