0

Android 4.0 を対象としており、TCP/IP を使用してテレメトリ デバイスと通信しています。Android 4.0 では、すべてのネットワーキングを別のスレッドで行う必要があります。最初にソケットを開き、次にデバイスに接続して、別のスレッドからすべての情報をダウンロードします。この時点で、進行状況ダイアログを表示して、より詳細な情報のダウンロードの進行状況を表示したいと考えています。私の問題は、メイン UI 以外のどこからでも進行状況ダイアログを表示できないことです。しかし、進行状況ダイアログを表示する準備ができている別のスレッドのポイントにいつ到達したかはわかりません。システムを拘束せずにメイン UI からこれを確認する方法はありますか?

4

3 に答える 3

1

そのようにハンドラを使用します:

final int PROGRESS_BY = 1;

    final Handler handler = new Handler()
    {
        public void handleMessage(android.os.Message msg) 
        {
            switch (msg.what)
            {
                case PROGRESS_BY :
                    progressBar.setProgress((Integer) msg.obj);
                    break;
            }
        }
    };

    Thread thread = new Thread()
    {
        @Override
        public void run() 
        {
            super.run();
            // do something
            Message msg = new Message();
            msg.what = PROGRESS_BY;
            msg.obj = new Integer(10);
            handler.sendMessage(msg);
            // do something
            [...]
        }
    };
于 2012-07-24T15:28:28.450 に答える
1

AsyncTaskあなたが説明するような場合を対象としたフレームワーク提供のユーティリティです。他のスレッド、つまり非同期タスクが実行されているスレッドから、publishProgressAsyncTask の () メソッドを使用して進行状況を公開できます。非同期で別のスレッドで実行されますが、メイン スレッドで実行されるイベント コールバックがあります。OnProgressUpdate() は、進行状況ダイアログを操作できる方法です。

http://developer.android.com/reference/android/os/AsyncTask.html

于 2012-07-24T15:32:06.557 に答える
0

メイン UI でダイアログをトリガーするには、'context.runOnUiThread()' を使用する必要があります。ここで、context は表示アクティビティへの参照です。AsyncTask の使用も検討する価値があります。

すべてを詳細に説明する Android のブログ投稿は次のとおりです: http://android-developers.blogspot.ca/2009/05/painless-threading.html

余談ですが、最初から不確定な進行状況ダイアログの表示を開始することもできます。これにより、ユーザーは視覚的なフィードバックなしで待機することがなくなり、ダウンロードの詳細がわかったら確定に切り替えることができます。

于 2012-07-24T15:24:08.180 に答える