2017-04-13 72 views
-6

我正在使用排球库来执行网络操作。在应用程序启动时,我碰到了服务,我想停止所有的操作,直到我得到服务的响应。如何停止UI线程直到网络操作完成

所以我想同步执行此操作。因为我正在使用Volley,默认情况下它在单独的线程中工作。那么我该如何做到这一点。

我已经创建了自定义接口/侦听器来处理这个问题,但Android是否提供了一些方法来实现这一点。

我做了以下。

飞溅活动实现了一个接口,并且数据被加载

@Override 
public void onContainerLoaded() { 
    //startActivity(MainActivity) 
} 

回答

1

后,即使你想,你一定要永远运行任何与网络相关的任务同步不言而喻主要活动。

你可以做的是正常地开始你的活动,并用一个进度条标志代替你的布局,当你的任务完成时它被设置为visibility.gone。

编辑:顺便说一句,如果你刚开始你的应用程序,但你还没有做任何具体的事情,我会建议你使用AsyncTask而不是Volley,这往往会导致层耦合错误。

1

使用一些事件总线如Otto

创建活动,使您的主要活动订阅使用事件总线的事件,开始你的操作,显示“正在加载...”或类似ProgressDialog在主活动。完成时,从您的工作线程向您的主要活动发送事件。让你的主要活动在收到事件时关闭“加载”对话框,

+0

为什么你会建议使用事件总线而不是Android的板载API? – Fildor

+0

绿色机器人或奥托易于使用,并没有太多的“板载”API的相同(你可以使用本地广播,但也有一些问题) –

+0

AsyncTask呢?我的感觉是,这足以满足OP的要求,不是吗?或者,我已经看到使用Loaders的解决方案。不要误会我的意思,我不反对你的建议。我只想了解,为什么第三方在这里是必需的。无论如何,如果您已经在应用程序中使用了事件总线,我可以想象这将是更简单的方法。 – Fildor

1

我想一个更好的问题将是为什么你要强制它在主线程?

据我所知,volley不会让你这样做,但如果你自己做网络操作,你也许可以做到。 Honeycomb之后,你将得到一个NetworkOnMainThreadException,所以你将需要覆盖policies

相关问题