06/04
2012
Android 새로운 스레드를 이용하여 UI를 변경시 에러 발생시
이번에 스타펫 위젯에 퍼트리기 기능을 추가 하였다.
트위터와 페이스북을 추가 했는데.
퍼트리기를 하고나면 해당 레어펫을 바로 사용할 수 있도록 만들었다.
트위터와 페이스북 모두 API가 잘 만들어저 있어서
인증 및 글쓰기 등은 그렇게 어렵지 않게 진행할 수 있었다.
사실 기능이 다 완료되고 내폰(갤럭시 넥서스)에서는 모든 기능이 잘 동작하였다.
다 완료되었다고 생각하고 배포판을 만들었는데..
아 이런... ICS에서는 잘 동작하는데..
그 아래 버전에서는 다음과 같은 에러가 나는 것이었다.
Only the original thread that created a view hierarchy can touch its views.
아이 정말 ㅠㅠ
그래서 찾아보니 아래와 같은 글들이 있었다.
참고자료
요청 : http://www.androidpub.com/32805
응답 : http://binsolb.tistory.com/entry/CalledFromWrongThreadException
감사합니다.
원인은 트위터 API에서 새로운 스레드를 이용하여 UI를 변경시키려 해서 발생하는 것 이었다.
그런데 ICS에서는 동적으로 변경하는 부분에 대해서 해결이 된 것인지 이상없이 동작을 하였고 하위버전에서 문제가 발생하는 것이었다. (역시 테스트 잘 하고 올려야 한다.)
위에 참고 글들을 보면 되겠지만 간단하게 적어본다면
아래와 같이 핸들러를 만들어서 해결 할 수있다.
1. 내가 동적으로 UI를 변경하려 했던 부분을 아래와 같은 코드로 변경한다.
new Thread()
{
public void run()
{
Message msg = handler.obtainMessage();
handler.sendMessage(msg);
}
}.start();
2. 핸들러를 만든다.
final Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
// 원래 하고싶었던 일들 (UI변경작업 등...)
}
};
크 안드로이드 책 한권 사서 봐야지...
그래도 역시 자바기반이고 뭔가 J2EE와 비슷한 아키텍처를 가지고 있어서 쉽게 적응 가능하다.
재미있는 안드로이드 프로그래밍 이지만... 기종별 테스트 잘 해야겠다;;;