Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何停止UI线程直到网络操作完成_Java_Android_Multithreading_Performance_Android Layout - Fatal编程技术网

Java 如何停止UI线程直到网络操作完成

Java 如何停止UI线程直到网络操作完成,java,android,multithreading,performance,android-layout,Java,Android,Multithreading,Performance,Android Layout,我正在使用volley库执行网络操作。在应用程序启动时,我点击服务,我想停止所有操作,直到得到服务的响应 所以我想同步执行这个。因为我正在使用截击,默认情况下,截击在单独的线程中工作。那么我该怎么做呢 我已经创建了自定义接口/监听器来处理这个问题,但Android是否提供了一些方法来实现这一点 我已经完成了以下工作 Splash活动实现一个接口,在加载数据后,它转到主活动 @Override public void onContainerLoaded() { //startActivit

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

所以我想同步执行这个。因为我正在使用截击,默认情况下,截击在单独的线程中工作。那么我该怎么做呢

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

我已经完成了以下工作

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

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

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

您可以做的是正常启动您的活动,并用progressbar徽标替换您的布局,该徽标设置为visibility.gone,当您的任务完成时


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

使用一些事件总线,例如


创建一个事件,使您的主要活动使用事件总线订阅该事件,启动您的操作,显示加载。。。或者在你的主要活动中。当工作线程完成时,从该线程向主活动发送事件。让您的主活动在收到事件时关闭加载对话框,

我想一个更好的问题是为什么要将其强制到主线程上


据我所知,截击不会让你这么做,但如果你自己进行网络操作,你可能会这么做。蜂巢之后,您将获得一个NetworkOnMainThreadException,因此您需要覆盖。

为什么建议使用事件总线而不是Android的板载API?Green Robot或Otto很容易使用,并且没有太多板载API。您可以使用本地广播,但这有一些问题。AsyncTask呢?我觉得这足以满足OP的要求,不是吗?或者,我也见过使用装载机的解决方案。别误会我的意思,我并不反对你的建议。我只是想了解,为什么第三方在这里是必要的。我可以想象,如果你已经在应用程序中使用了事件总线,那么这将是一种更简单的方法。