如何在网络操作完成之前停止 UI 线程



我正在使用凌空库来执行网络操作。在应用程序启动时,我点击了服务,我想停止所有操作,直到我从服务获得响应。

所以我想同步执行。因为我使用的是 Volley,默认情况下它在单独的线程中工作。那我该怎么做。

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

我已经做了以下工作。

启动活动实现一个接口,并在加载数据后转到主活动

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

即使你愿意,你也绝对不应该同步运行任何与网络相关的任务。

相反,您可以做的是正常开始您的活动,并将您的布局替换为进度条徽标,当您的任务完成时,该徽标设置为 visibility.gone 。

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

使用一些事件总线,如 Otto

创建一个事件,

使用事件总线使您的主活动订阅该事件,启动您的操作,显示"正在加载..."或主要活动中的进度对话框。工作线程完成后,从工作线程向主活动发送事件。使您的主活动在收到事件时关闭"正在加载"对话框,

我想

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

据我所知,凌空抽射不会让你这样做,但如果你自己做网络操作,你也许可以。在Honeycomb之后,您将获得NetworkOnMainThreadException,因此您需要覆盖策略。

最新更新