android thread.join()无法按预期工作

时间:2018-06-24 20:41:45

标签: android multithreading android-studio android-volley

我正在尝试实现以下目标:在后台线程中使用Volley的Futures执行单个同步http请求,并让当前线程等待后台线程完成,以便以后可以处理http响应。

实际上发生的是,在.join()之后,一切似乎都死机了,我从没有在runnable的run方法内输入断点,也从未在join()之后进入任何命令。

注意-当前线程是活动类,并且此特定功能是Java类的,该类的服务由活动调用。我知道UI线程上的.join()会导致它挂起...但是只能等到后台线程完成,对吗?好吧,当我使用.wait()而不是.join()时,后台线程完成得非常快。好像调用join并不能让后台线程完成任务。

private String requestConversionRatesFromApi() throws InterruptedException
{
    final JSONObject[] localResponse = {null};
    Runnable runnable = new Runnable()
    {
        @Override
        public void run()
        {
            String url = "myurl";
            RequestQueue queue = Volley.newRequestQueue(_context);
            RequestFuture<JSONObject> future = RequestFuture.newFuture();
            JsonObjectRequest request = new JsonObjectRequest(url, new JSONObject(), future, future);
            queue.add(request);

            try {
                JSONObject jsonObject = future.get();
                localResponse[0] = jsonObject; //doesn't get here either unless I'm using .wait() and then it happens really fast
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        }
    };
    Thread t = new Thread(runnable);
    t.start();
    t.join();
    return "foo"; //Doesn't get here
}

0 个答案:

没有答案