0

サーバーとの間で情報を設定/取得するために RPC メカニズムを使用する Android アプリがあります。メインスレッド (ブロッキング) 内から RPC を呼び出し、それらをブロッキングしたいと考えています。ただし、呼び出しが数秒間続く場合があり、指定された時間 (たとえば 1 秒) 後に不確定な進行状況ダイアログを表示したい場合があります。

呼び出しを行う新しいスレッドを生成しようとしましたが、メイン スレッドは呼び出しが終了するまで (スリープを使用して) ループで待機します。このループ内で進行状況ダイアログを表示しますが、これは機能していません。

別のスレッド内で進行状況ダイアログを表示および更新することは可能ですか、またはブロッキング呼び出しを使用できるより良い解決策を知っている人はいますか?

4

3 に答える 3

0

私はうまくいくように見える解決策を見つけました(少なくとも私はまだ問題に気づいていません)。AsyncTaskのようなものを使用するのが適切な方法であることはわかっていますが、私の場合、それによるメリットはなく、プログラムロジックが複雑になります。

新しいスレッド内でUIを更新するには:

    new Thread() 
    {
        public void run()
        {
            Looper.prepare();
            ... do UI stuff here
            Looper.loop();
        }
    }.start();
于 2012-06-25T16:00:46.237 に答える
0

メインスレッドをループで待機させ、同時に進行状況ダイアログを表示することはできません。メインスレッドが待機するか、ダイアログを表示します。

なぜメインスレッドをブロックしたいのですか? インターネット経由の通信は、完了までにかかる時間が分からないため、常にバックグラウンド スレッドで実行する必要があります。そのようなことをしてAsyncTask、進行状況ダイアログをメインに表示します。

于 2012-06-25T15:38:07.663 に答える
0

を使ってみてくださいAsyncTask。これは、このようなネットワーク呼び出しを行うために使用される Android メカニズムです。ここの簡単な詳細を入手してAsyncTaskください:

サーバーへの SSH 試行中に AsynTask を使用して進行状況バーを表示する

を使用するAsyncTaskと、ユーザーが先に進むのをブロックできます。progress dialogonPreExecute()メソッドでa を表示する必要がありAsyncTaskます。ネットワーク関連のアクティビティはすべて で行われdoInBackground()ます。バックグラウンド アクションが完了すると、が破棄されるonPostExecute()場所が呼び出されます。progress dialog

AsyncTask2 つのスレッドが同時に動作しているため、非同期呼び出しです。1 つは進行状況ダイアログを表示している UI スレッドで、もう 1 つはサーバーからデータを取得している非 UI バックグラウンド スレッドです。

この説明がお役に立てば幸いです。

于 2012-06-25T15:32:40.793 に答える