안드로이드 개발 질문/답변
(글 수 45,052)
도저히 안풀리는문제가 있어서 이렇게 다시 문의 하게 됐습니다.
다름이 아니라
웹페이지 로드시 이미지 띄웠다가 로드 완료 되면
이미지가 사라지는 간단한 예제입니다.
그런데 제가 이 예제에서 로드 완료후에도 지속 시간을 늘리기 위하여 타이머를
사용하였습니다. 그리고 외부 웹페이지 읽을시에는 잘 동작합니다.
다만 로컬파일을 읽으면 타이머가 없을때는 이미지 안보이게 하는 명령어가
잘 수행 되고
타이머가 있으면 타이머 함수 내부로는 진입을 하나
이미지가 사라지는 명령어는 처리가 않됩니다.
이미지뷰를 클릭해 줘야만 이미지가 사라지게 됩니다.
원인을 모르겠습니다.
정리하자면
http로 연결되는 외부 사이트 부를때는로드 완료 이벤트 가 일어나면
타이머에 진입해서 이미지가 사라지는데
로컬html파일을 부르면
타이머에 진입하고도 이미지가 사라지질 않고 클릭해야 사라집니다.
해당 프로젝트 파일 첨부 하였습니다.
2010.03.29 20:49:47
음...올려주신 소스를 확인해 보았습니다. 일단 기본적으로 작동이 안되는 이유는 UI 스레드(메인 스레드) 이 외의 스레드에서 UI 작업을 수행하셨기 때문입니다. 일반적인 경우라면 예외가 발생해야 하는데 Timer 쪽은 해당 예외가 Catch 되는지 예외없이 그냥 작동이 안되더라구요... (사실 외부 페이지를 읽을 때는 잘 작동된다는 점이 좀 신기합니다....) 일단은 올려주신 코드 중 TimerTask 부분을 아래와 같이 수정해서 정상 작동하는 것을 확인했습니다. (코드가 좀 지저분하긴 하지만... view 의 post 명령을 이용해서 UI 관련 작업을 UI 스레드에서 수행하도록 수정하였습니다...)
TimerTask myTask = new TimerTask() {
public void run() {
Log.d("myTask", "run45645645645()");
myOpenImage.post(new Runnable(){
@Override
public void run() {
myOpenImage.setVisibility(View.INVISIBLE);
Toast.makeText(WebViewTest.this,"load complete", 3000).show();
}
});
}
};