에서 데이터를 듣고 나는 다음과 같은 주요 구성 요소네트워크
이있는 안드로이드 응용 프로그램이되는 스레드로 메시지를 보낼연결 스레드 에게 IRC에 연결되어에서 메시지를 수신 연결 스레드를 관리하는 서비스 connection 서비스에 바인드 된 사용자.
UI에 버튼이 있으며 버튼을 클릭하면 irc 서버에 메시지를 보내야합니다. 내 생각은 연결 스레드에서 처리기를 생성하고 서비스에서 처리기를 가져온 다음 UI에서 서비스로, 그리고 스레드에서 스레드로 메시지를 보냈다.
스레드의 클래스 수준에서 처리기를 만들면 networkonui 예외가 발생합니다. 내 핸들러의 인스턴스를 run() 메소드로 옮겼고 Looper.prepare()를 사용하도록했다. 나는 내가이 잘못에 접근했다는 것을 느끼고 이것을 어떻게 관리해야하는지에 대한 조언을 구하고있다.
도움을 주시면 감사하겠습니다.
이public class MainActivity extends Activity {
Handler mHandler,childHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler = new Handler(){
public void handleMessage(Message msg) {
TextView tv = (TextView) findViewById(R.id.displayMessage);
tv.setText(msg.obj.toString());
}
};
new LooperThread().start();
}
public void onSend(View v){
Message msg = childHandler.obtainMessage();
TextView tv = (TextView) findViewById(R.id.messageText);
msg.obj = tv.getText().toString();
childHandler.sendMessage(msg);
}
@Override
protected void onStart() {
super.onStart();
LooperThread ttTest = new LooperThread();
ttTest.start();
}
class LooperThread extends Thread {
final int MESSAGE_SEND = 1;
public void run() {
Looper.prepare();
childHandler = new Handler() {
public void handleMessage(Message msg) {
Message childMsg = mHandler.obtainMessage();
childMsg.obj = "child is sending "+(String)msg.obj;
mHandler.sendMessage(childMsg);
}
};
Looper.loop();
}
}
}
그 버튼을 누른에 스레드에 메시지를 보낼 수있는 샘플 코드, 다시 스레드 메시지를 보낼 : 내가 안드로이드 배우기 시작했을 때
안녕하세요. 응답 해 주셔서 감사합니다. 이 접근 방식의 문제점은 스레드가 while() 루프에있어 메시지를 기다리고 있으므로 prepare() 또는 loop()를 추가해야한다고 생각하지 않는다는 것입니다. – Stephen
스레드 자체가 while 루프에있는 경우 don 루프를 사용하지 마라() 나는 생각한다. – Sunny