0

私の Android アプリケーションでは、60 秒ごとに自動的に更新する必要があります。だから私はこのようにそれを試しました:

public void refresh_check() {
        Thread myThread = new Thread()
        {
            int counter = 0;
            @Override
            public void run() {
                MyActivity.this.runOnUiThread(new Runnable(){
                    @Override
                    public void run() {
                        while (counter < 60) {
                            try {
                                Thread.sleep(1000);
                                counter += 1;
                                System.out.println("Counter: " + counter);
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                        refresh();
                    }});
                super.run();
            }
        };
        myThread.start();       
    }

これはカウンターをlogcatに出力する方法で機能しますが、私のアプリケーションでは黒いビューが表示されます。refresh()は http リクエストを伴う単なる関数であり、これは単独で機能するため、間違いはスレッドのどこかにある必要があります:/ 誰か助けてくれますか?

4

1 に答える 1

0

Threadを正しく利用していません。UI スレッドで長いタスクを実行することは、Threadをまったく使用しないのと同じです。必要なことを達成するには、次のようにする必要があります。

public void refresh_check() {
        Thread myThread = new Thread()
        {
            int counter = 0;
            @Override
            public void run() {
                while (counter < 60) {
                            try {
                                Thread.sleep(1000);
                                counter += 1;
                                System.out.println("Counter: " + counter); //I think this may cause exception, if it does try removing it
                            } catch (InterruptedException e) { 
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                        refresh(); // In refresh(), use TextView.post(runnable) to post update the TextView from outside the UI thread or use handlers
                    }});
                super.run();
            };
        myThread.start();       
    }

また、AsyncTask クラスを見てください。これにより、UI スレッド ( ) の外で長いタスクを実行したり、( )doInBackground()からの結果で UI を更新したりできます。onPostExecute()

于 2013-04-01T08:48:06.117 に答える