web-dev-qa-db-ja.com

Android runOnUiThreadとjava)の単純なコードの違い

私は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);
}
});

両方の例の違いは何ですか。助けてください。あなたの応答は私にとって新しい学習になります。

8
Mohit Gaur

UIThreadコードの単純なコードを意味していると仮定すると、

スレッドとは何ですか?

スレッドは実行中のプロセスを定義します

最初runOnUiThread ..

Iスレッドで指定されたアクションを実行します。 現在のスレッドがUIスレッドの場合、アクションはすぐに実行されます。現在のスレッドがnot UIスレッドの場合、アクションはUIスレッドのイベントキューに投稿されます。

IThreadとは

  • アプリケーションの実行のメインスレッド
  • ほとんどのアプリケーションコードはここで実行されますonCreateonPauseonDestroyonClickなど。

    したがって、単純にUIを更新または変更する原因となるものはすべて、UIスレッドで発生します

明示的に新しいスレッドを生成してbackgroundで作業を行う場合、このコードはUIThreadで実行されません。UIを変更する何かを実行したい場合はどうすればよいでしょうか。その後、runOnUiThreadへようこそ

UI以外のスレッドからUIを更新する場合は、runOnUiThread()を使用する必要があります。たとえば、バックグラウンドスレッドからUIを更新する場合。同じことに対してHandlerを使用することもできます。

13
Charuක

通常、コードはUIスレッドで実行されます。長時間かかるタスク(ネットワーク要求など)の場合は、バックグラウンドタスク(ハンドラー、非同期タスク、スレッドなど)を使用します。

ビューはUIスレッドからのみtouchedであるため、バックグラウンドスレッドでコードを実行していて、このバックグラウンドスレッドからビューを更新する必要がある場合は、runOnUiThread()を使用します。

2
Tobias

'なぜ' Androidに 'runOnUiThread()'オプションがあるのか​​を説明するには、Javaはバイトコード(dex)の作成にのみ使用される)を理解することが重要です。そのAndroidが使用します。電話で実行されているコードはJavaではありません。

さらに、Androidスレッド 'は'ルーパー 'と呼ばれるものを持つことができます。この'ルーパー 'は、キューを介して'タスク(技術的に実行可能なメッセージ) 'を順番に処理するものです。 ui thread 'には、デフォルトでルーパーがすでに接続されています。

これは、作成したランナブルがメインUIスレッドのルーパーのキューに配置されたことを意味します。 (これが、ランナブルが瞬時に実行されるのではなく、「迅速に」/「すぐに」実行される理由です)

ランナブルを使用してUIスレッドでコードを実行する理由は、作成した他の「バックグラウンドスレッド」にいて、何らかの方法でUIを更新したいためです。 (UIスレッドのみがUIと対話できます)

1
mawalker