Java 如何停止UI线程直到网络操作完成
我正在使用volley库执行网络操作。在应用程序启动时,我点击服务,我想停止所有操作,直到得到服务的响应 所以我想同步执行这个。因为我正在使用截击,默认情况下,截击在单独的线程中工作。那么我该怎么做呢 我已经创建了自定义接口/监听器来处理这个问题,但Android是否提供了一些方法来实现这一点 我已经完成了以下工作 Splash活动实现一个接口,在加载数据后,它转到主活动Java 如何停止UI线程直到网络操作完成,java,android,multithreading,performance,android-layout,Java,Android,Multithreading,Performance,Android Layout,我正在使用volley库执行网络操作。在应用程序启动时,我点击服务,我想停止所有操作,直到得到服务的响应 所以我想同步执行这个。因为我正在使用截击,默认情况下,截击在单独的线程中工作。那么我该怎么做呢 我已经创建了自定义接口/监听器来处理这个问题,但Android是否提供了一些方法来实现这一点 我已经完成了以下工作 Splash活动实现一个接口,在加载数据后,它转到主活动 @Override public void onContainerLoaded() { //startActivit
@Override
public void onContainerLoaded() {
//startActivity(MainActivity)
}
即使您愿意,也绝对不应该同步运行任何与网络相关的任务 您可以做的是正常启动您的活动,并用progressbar徽标替换您的布局,该徽标设置为visibility.gone,当您的任务完成时
编辑:顺便说一下,如果你刚刚启动你的应用程序,但还没有做任何具体的工作,我建议你使用AsyncTask而不是Volley,这通常会导致层耦合错误 使用一些事件总线,例如
创建一个事件,使您的主要活动使用事件总线订阅该事件,启动您的操作,显示加载。。。或者在你的主要活动中。当工作线程完成时,从该线程向主活动发送事件。让您的主活动在收到事件时关闭加载对话框,我想一个更好的问题是为什么要将其强制到主线程上
据我所知,截击不会让你这么做,但如果你自己进行网络操作,你可能会这么做。蜂巢之后,您将获得一个NetworkOnMainThreadException,因此您需要覆盖。为什么建议使用事件总线而不是Android的板载API?Green Robot或Otto很容易使用,并且没有太多板载API。您可以使用本地广播,但这有一些问题。AsyncTask呢?我觉得这足以满足OP的要求,不是吗?或者,我也见过使用装载机的解决方案。别误会我的意思,我并不反对你的建议。我只是想了解,为什么第三方在这里是必要的。我可以想象,如果你已经在应用程序中使用了事件总线,那么这将是一种更简单的方法。