【问题标题】:Trouble with callable interface in androidandroid中可调用接口的问题
【发布时间】:2013-01-16 10:24:02
【问题描述】:

我创建了空白项目并尝试执行下一个代码。不幸的是我遇到了问题: 未完成我的线程时未加载主要活动。如果不使用线程的返回值一切正常。 很遗憾 最终的 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!");
    }
}

【问题讨论】:

  • 我不明白你在问什么。看来你正在阻塞一个线程,可能是 ui 线程?
  • 休眠当前线程Thread.currentThread().sleep(10 * 1000);

标签: java android multithreading


【解决方案1】:

这一行 str = task.get(); 阻塞 main thead,而您的可调用对象正在其他线程中执行。通过Handler 或使用AsyncTask 从您的任务返回结果。

【讨论】:

  • 谢谢!我会试试看的。
  • 不客气。 AsyncTask 和 handler 是 android 中处理并发最常用的方法。但是还有其他方法...
猜你喜欢
  • 2012-06-24
  • 2019-06-08
  • 2011-11-23
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
相关资源
最近更新 更多