0

Androidでスレッドを処理する際に1つの問題があります。私のクラスでは、スレッドが終了した後にUIを作成するスレッドを1つ作成する必要があります。ここでは、スレッドが処理を完了するまでメインプロセスを待ちたいと思いますが、メイン プロセス スレッドに wait() または通知を配置しても、アプリケーションに UI が表示されない

これはサンプルコードです

    protected void onCreate(Bundle savedInstanceState) {

         downloadThread = new MyThread(this);
            downloadThread.start();

            synchronized(this){  
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

 String test=Recognition.gettemp();
    public class MyThread extends Thread {
        private Recognition recognition;

        public MyThread(Recognition recognition) {
            this.recognition = recognition;
            // TODO Auto-generated constructor stub
        }

        @Override
        public void run() {
    synchronized(this)

            {                

                        handler.post(new MyRunnable());

                }

                notifyAll();
            }
        }
    }
    static public class MyRunnable implements Runnable {
        public void run() {
                settemp(template);
            }

        }
    }

    public static String gettemp() {
        return template;
    }
    public static void settemp(String template) {
        Recognition.template = template;
    }

}

ここでは、AsynTask を使用しません。他の問題があるため、スレッドを選択する理由です。今でも問題はスレッド待機です。

4

4 に答える 4

1

-を使用java.util.CountDownLatchします。ここでは、他のコードを開始する前にプロセスを完了させることができます。

- countDown()そしてawait()あなたに役立つでしょう......

次の CountDownLatch の例を参照してください。

http://www.javamex.com/tutorials/threads/CountDownLatch.shtml

于 2012-11-30T07:02:02.943 に答える
0

以下のロジックを使用してください:-

new Thread(new Runnable() 
{
    @Override
    public void run() 
    {
        //do the code here such as sending request to server
        runOnUiThread(new Runnable() 
        {
            @Override
            public void run() 
            {
                //do here the code which interact with UI
            }
        });
    }
}).start();
于 2012-11-30T07:09:56.567 に答える
0

メイン UI スレッドをフリーズするとどうなると思いますか?

ASyncTask を使用して onPreExecute メソッドで GUI を表示し、doInBackground でタスクを実行してから、onPostExecute メソッドで結果を表示する必要があります。

さらに、onProgressUpdate を使用して進行状況を更新することもできます。

于 2012-11-30T07:10:52.993 に答える
0

これは、アクティビティ/アプリをどのように構成する必要があるかについての単なるアドバイスではありません。

wait()ユーザーエクスペリエンスが悪いと言ってメインスレッドをブロックしないでください。また、Android Not Responding (ANR) ポップアップも発生します。

バックグラウンドから UI を更新するスレッドを作成し、UI をレスポンシブにすることができます。UI の静的部分をロードしてonCreate()から、バックグラウンド スレッドを起動してコンポーネントの残りを遅延ロードします。

于 2012-11-30T07:40:43.927 に答える