別のスレッドからの UI の更新は禁止されていることを知っているので、アプリケーションからどのような結果が得られるかを試してみました。はい、UI コンポーネントを更新するとアプリがクラッシュしますが、よくわからないケースが 1 つあります。アプリは問題なく動作します。
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 }
}
});
}
私の問題についての以前の説明で申し訳ありませんが、ほとんどの人が誤解していると思うので、質問を言い換えます。上記の 2 つのシナリオがあります。新しいスレッドの作成と UI コンポーネントの更新の両方でクラッシュ エラーが発生するはずですが、実際には 2 つ目のシナリオのみがクラッシュしますが、最初のシナリオはクラッシュしません。理由を知っている人はいますか?