1

空のプロジェクトを作成し、次のコードを実行しようとしました。残念ながら、問題が発生しました: スレッドが終了しないのにメイン アクティビティが読み込まれません。スレッドからの戻り値を使用しない場合、すべて正常に動作します。残念ながら最終的な ExecutorService サービスです。最終的な将来のタスク。

    service = Executors.newFixedThreadPool(1);
    task    = service.submit(new Foo());


    try
    {
        final String str;

        // waits the 10 seconds for the Callable.call to finish.
        str = task.get();
        Log.d("VSK",str);
    }
    catch(final InterruptedException ex)
    {
        ex.printStackTrace();
    }
    catch(final ExecutionException ex)
    {
        ex.printStackTrace();
    }

    service.shutdownNow();

}
class Foo
        implements Callable<String>
{
    public String call()
    {
        try
        {
            // sleep for 10 seconds
            Thread.sleep(10 * 1000);
        }
        catch(final InterruptedException ex)
        {
            ex.printStackTrace();
        }

        return ("Hello, World!");
    }
}
4

1 に答える 1

2

この行str = task.get();は、呼び出し可能オブジェクトが他のスレッドで実行されている間、メインのスレッドをブロックします。Handlerを介してタスクから結果を返すか、 AsyncTaskを使用します。

于 2013-01-16T10:31:39.843 に答える