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

时间:2017-04-13 07:16:21

标签: java android multithreading performance android-layout

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

所以我想同步执行此操作。因为我正在使用Volley,默认情况下在单独的线程中工作。那我怎么能这样做呢。

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

我做了以下。

Splash Activity实现了一个接口,并在加载数据后转到Main Activity

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

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

使用某些事件总线,例如Otto

创建一个活动,让您的主要活动使用活动总线订阅活动,开始您的操作,显示一个"正在加载......"或主要活动中的ProgressDialog。从工作线程完成后,将事件发送到主活动。让您的主要活动关闭"加载"收到事件时的对话框,

答案 2 :(得分:1)

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

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