1

私はこのスレッドを持っています:

private class MyThread extends Thread{
    public void run(){
        try {
            sleep(10000);
            Utils.stopTimer();
        } catch (InterruptedException e) {
            Log.d(TAG, "interrupted");
        }
    }
}

そして、スレッドを開始しました。ただし、スレッドがメインUIスレッドをブロックしているため、ユーザーの操作に応答しません。

4

3 に答える 3

8

電話myThread.start()ではなくmyThread.run()

後者を実行しても、コードが別のスレッドで実行されることはありませんが、他の通常のメソッド呼び出しと同様runに、現在の(UIなどの)スレッドでメソッドを呼び出すだけです。


リンクされたドキュメントからの抜粋:

startこのスレッドに実行を開始させます。Java仮想マシンはrun[開始されたスレッドで]メソッドを呼び出します。

于 2013-03-06T06:27:38.757 に答える
4

スレッドを開始するにはthread.start()を呼び出す必要があり、呼び出すとrun()メソッドが自動的に実行されます。

  Calling this thread will also blocks the UI thread, you need to call it Async Task or in runonuithread.
于 2013-03-06T06:31:49.457 に答える
1

このタイプのコードを使用するAsyncTaskActivity.RunOnUIThread、このタイプのコードを実行することをお勧めします。

于 2013-03-06T06:36:20.860 に答える