私はAndroidアプリケーション開発の初心者です。Androidのスレッドで作業しています。メインUIでコードを実行するrunOnUiThread
について読んだことがあります(間違っていない場合は?私は推測する。)。
私の質問は、メインUIの通常のコードとrunOnIUThread
内のコードの違いは何ですか。
例:1
class A
{
getDataFromServer(foo);//Code on mainUI
}
例:2
getActivity.runOnUiThread(new Runnable(){
@Override
public void run(){
getDataFromServer(foo);
}
});
両方の例の違いは何ですか。助けてください。あなたの応答は私にとって新しい学習になります。
UIThreadコードの単純なコードを意味していると仮定すると、
スレッドとは何ですか?
スレッドは実行中のプロセスを定義します
最初runOnUiThread ..
Iスレッドで指定されたアクションを実行します。 現在のスレッドがUIスレッドの場合、アクションはすぐに実行されます。現在のスレッドがnot UIスレッドの場合、アクションはUIスレッドのイベントキューに投稿されます。
IThreadとは
ほとんどのアプリケーションコードはここで実行されますonCreate
、onPause
、onDestroy
、onClick
など。
したがって、単純にUIを更新または変更する原因となるものはすべて、UIスレッドで発生します
明示的に新しいスレッドを生成してbackgroundで作業を行う場合、このコードはUIThreadで実行されません。UIを変更する何かを実行したい場合はどうすればよいでしょうか。その後、runOnUiThread
へようこそ
UI以外のスレッドからUIを更新する場合は、runOnUiThread()
を使用する必要があります。たとえば、バックグラウンドスレッドからUIを更新する場合。同じことに対してHandler
を使用することもできます。
通常、コードはUIスレッドで実行されます。長時間かかるタスク(ネットワーク要求など)の場合は、バックグラウンドタスク(ハンドラー、非同期タスク、スレッドなど)を使用します。
ビューはUIスレッドからのみtouchedであるため、バックグラウンドスレッドでコードを実行していて、このバックグラウンドスレッドからビューを更新する必要がある場合は、runOnUiThread()
を使用します。
'なぜ' Androidに 'runOnUiThread()'オプションがあるのかを説明するには、Javaはバイトコード(dex)の作成にのみ使用される)を理解することが重要です。そのAndroidが使用します。電話で実行されているコードはJavaではありません。
さらに、Androidスレッド 'は'ルーパー 'と呼ばれるものを持つことができます。この'ルーパー 'は、キューを介して'タスク(技術的に実行可能なメッセージ) 'を順番に処理するものです。 ui thread 'には、デフォルトでルーパーがすでに接続されています。
これは、作成したランナブルがメインUIスレッドのルーパーのキューに配置されたことを意味します。 (これが、ランナブルが瞬時に実行されるのではなく、「迅速に」/「すぐに」実行される理由です)
ランナブルを使用してUIスレッドでコードを実行する理由は、作成した他の「バックグラウンドスレッド」にいて、何らかの方法でUIを更新したいためです。 (UIスレッドのみがUIと対話できます)