마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

스레드 간 통신 문제....

0 추천

소켓 프로그래밍 작성중인데

데이터를 외부로부터 수신하면 특정 액티비티의 화면이 변화하게 만들고 싶습니다.

그런데 소켓 수신 스레드에서 외부 함수를 호출하려고하면 어플리케이션 중단이 발생하면서 강제 종료되어버리네요.

 

구조는 대충 이렇습니다.

 
public class MainActivity extends FragmentActivity {
 
...
 
public class Reciver extends Thread {
public void run() {
try {
while (keepRunning) {
...
socket.recive(packet);
Fragment1.update(packet);
...
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
 
public static class Fragment1 extends Fragment {
...
 
public void onClick(View v) {
socket.send(data);
...
}
 
public static update(Packet data)
{
... //화면구성
}
...
}
 

}

에러를 자세히 볼줄은 모르지만 스레드에서 외부함수 호출에 관한 영역문제인 것 같습니다.

사실 액티비티의 인스턴스도 아니고, static으로 해버리는 것도 말도 안되긴 한데

그렇다고 스레드 내에서 액티비티의 뷰들을 다룰수 있는 것도 아니고,

액티비티가 계속 리스닝하고있는 것도 아닌데...

가장 비용이 적게 액티비티의 내부함수를 호출할 수 있는 방법좀 알 수 있을까요?

고수님들 감사합니다.

ifreeta (260 포인트) 님이 2013년 10월 31일 질문
ifreeta님이 2013년 10월 31일 reshown

1개의 답변

0 추천
UI를 변경 시키려면 UI Thread(메인 스레드)에서 작업을 해야합니다.

위의 상황을 보니 일반 Thread에서 UI를 변경시키려고 하는데 그 부분에서 에러가 발생하는듯 합니다.

http://binsolb.tistory.com/entry/CalledFromWrongThreadException

위의 링크를 참고하면 어떻게 해결해야할지 알 수 있을 겁니다.
Ticker (180 포인트) 님이 2013년 10월 31일 답변
대체 어떻게 채택하는지를 모르겠군요.
감사합니다.
...