1
Androidでは、UIスレッド以外の別のスレッドからUIオブジェクトにアクセスできないと考えました。そのため、ハンドラとそのすべてが詳細をUIスレッドに伝える理由です。UIスレッド以外のスレッドからアンドロイドウィジェットリファレンスにアクセスできますか?
私は以下の簡単な例を試しました。私は作成された新しいスレッドからプログレスバーを更新しようとしました。出来た。私は例外を得ると思った。なぜ私が例外を受けなかったのか説明してください。
public class Main3Activity extends AppCompatActivity {
private static final String TAG = "Main3Activity";
Thread thread;
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
thread = new Thread(new MyThread());
progressBar = (ProgressBar) findViewById(R.id.progressBar);
Log.i(TAG, "run: "+Thread.currentThread().getName());
thread.start();
}
class MyThread implements Runnable{
@Override
public void run() {
Log.i(TAG, "run: "+Thread.currentThread().getName());
for(int i=0; i<100; i++){
progressBar.setProgress(i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
ありがとうございます。それは理にかなっている。 – Manoj
人々の素敵な質問の多くはそれに疑問を持っています。 –