이번에 스타펫 위젯에 퍼트리기 기능을 추가 하였다. 트위터와 페이스북을 추가 했는데. 퍼트리기를 하고나면 해당 레어펫을 바로 사용할 수 있도록 만들었다.
트위터와 페이스북 모두 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변경작업 등...) } };
|