ハンドラー、asynctask、または runOnUiThread で ui 要素を更新する理由について混乱しています。UI スレッドにいる場合は、1 から 4 までの番号が付けられた次のスニペットを検討してください: (デモ目的のため、構文エラーがある可能性があります)
// in MainActivity.java #1
public void onCreate(Bundle bundle) {
setContentView(R.layout.main);
TextView name = (TextView)findViewById(R.id.name);
name.setText("Name Changed!!");
}
// in MainActivity.java #2
public void onCreate(Bundle bundle) {
setContentView(R.layout.main);
TextView name = (TextView)findViewById(R.id.name);
handler.post(new Runnable() {
public void run() {
name.setText("Name Changed!!");
}
});
}
// in MainActivity.java #3
public void onCreate(Bundle bundle) {
setContentView(R.layout.main);
TextView name = (TextView)findViewById(R.id.name);
runOnUiThread(new Runnable() {
public void run() {
name.setText("Name Changed!!");
}
});
}
// in MainActivity.java #4
public void onCreate(Bundle bundle) {
setContentView(R.layout.main);
...same thing,...update textview in AsyncTask
}
// in MainActivity.java #5
public void onCreate(Bundle bundle) {
setContentView(R.layout.main);
TextView name = (TextView)findViewById(R.id.name);
name.post(new Runnable() {
public void run() {
name.setText("Name Changed!!");
}
});
}
例 #1 ~ #4 からわかるように、#2、#3、または #4 を使用する必要がある理由がわかりません。なぜなら、#1 は既に UI スレッドにいるからです!!!
つまり、#1 から #4 は同じだと言っています。つまり、UI スレッド/メイン スレッドで何かを実行したい場合、#2、#3、または #4 を使用する理由を教えてください。 1 は既に UI スレッドにあります。
それぞれの違いは何ですか?
ドキュメントまたは実際の使用例の引用を提供してください
ありがとうございました!!