다른 스레드의 UI 업데이트가 금지되어 있으므로 응용 프로그램에서 어떤 결과가 나올지 알았습니다. 예, UI 구성 요소를 업데이트 할 때 앱이 중단되지만 이해가 안되는 경우가 하나 있습니다. 앱이 정상적으로 실행됩니다.다른 스레드의 UI 업데이트
1)
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.textView1);
bt = (Button)findViewById(R.id.button1);
new Thread(){ //1
public void run() {
tv.setText("changed");
}}.start(); //1 }
}
2) 내 문제의 내 이전 설명 죄송합니다
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.textView1);
bt = (Button)findViewById(R.id.button1);
bt.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
new Thread(){ //1
public void run() {
tv.setText("changed");
}}.start(); //1 }
}
});
}
, 나는 대부분의 사람들이 오해 생각, 그래서 질문을 바꿔. 위의 시나리오는 두 가지입니다. 두 스레드 모두 새 스레드를 만들고 UI 구성 요소를 업데이트하기 때문에 오류가 발생하지만 실제로는 두 번째 시나리오 충돌 만 발생하지만 fisrt 시나리오는 충돌하지 않습니다. 누구든지 그 이유를 아나?
runOnUiThread 또는 UI 스레드에서 핸들러를 생성 한 다음 (예 : 클래스에서 필드 또는 최종 Handler로 로컬 변수로 변경) handler.post를 사용하십시오. Runnable은이 함수의 인자가 될 것이고 코드는 UI 스레드에서 무엇을하고 싶은지에 대한 것입니다. –
안녕하십니까. 나는 아직도 당신이 무엇을 의미하는지 분명하지 않다. 이 기능은 adroid에 존재합니까 아니면 J2SE에도 존재합니까? 보통 J2SE에서이 방법을 사용하여 새 스레드를 만들 수있었습니다. 맞습니까? –
나는이 질문을 다시 말하고 쉽게 이해할 수있다. –