2016-12-14 5 views
0

多くのチュートリアルやオンラインリソースから、私たちがメインスレッド以外のUI要素にアクセスすることはできません。ここでは、ハンドラ、runOnUiThread、またはAsyncTaskを使用してUI要素にアクセスできます。しかし、ここでは、次のコードからこれに関する質問があります。上記のコードでメインスレッド以外のUI要素にアクセスすることはできますか?

Code Output

public class MainActivity extends Activity { 

ProgressBar progress; 
TextView text; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    progress = (ProgressBar) findViewById(R.id.progreeBar); 
    text = (TextView) findViewById(R.id.loading); 
    Thread thread = new Thread(new myThread()); 
    thread.start(); 

} 

public class myThread implements Runnable{ 

    @Override 
    public void run() { 
     progress.setProgress(50); 
     text.setText("counter: "+50); 
    } 
} 
} 

、私は、任意のハンドラ、runOnUiThread、又はAsyncTaskを使用せずに別のスレッドからUI要素にアクセスすることができます。なぜ私はメインスレッドの外からUI要素にアクセスする際にエラーがないのだろうかと不思議です。

+0

されていないため、UI要素にアクセスすることができます。彼らはちょうどあなたが望む方法を更新しないかもしれません。 – ryantxr

+0

バックグラウンドスレッドのUIで**作業しないでください**以外は何も見つかりませんでした。 –

+0

申し訳ありませんが、私はあなたを取得していません。問題はまだ私のコンセプトを学び、構築していることです。ここでは、なぜ私がrunOnUiThread、Handlers、またはAysncTasksを持たずにメインスレッドからUIにアクセスできるのか混乱しています –

答えて

1

はい、他のスレッドからUIを更新できますが、回避する必要があります。 Androidのドキュメントごとに

Andoid UIツールキットは、thread-safe

関連する問題