【发布时间】:2020-12-14 13:30:56
【问题描述】:
我有这个活动:
public class ResultActivity extends AppCompatActivity implements ResultListener {
private String code = "";
private String data = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
code = intent.getStringExtra("code");
data = intent.getStringExtra("data");
MyExternal.DecodeAndSend(this, code, data);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
其中MyExternal 是其他库中的类。
DecodeAndSend 的方法是这样的:
public static boolean DecodeAndSend(ResultListener caller, String codigo, String data)
{
try {
ExecutorService pool = Executors.newFixedThreadPool(1);
HashMap<String,String> arguments = new HashMap<>();
Future<String> resultado = pool.submit(new ServerConnection(caller, url, arguments));
String status = resultado.get();
if (status.equals("OK"))
caller.OnSuccess();
else
caller.OnError(status);
pool.shutdown();
return true;
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return false;
}
最后,ServerConnection 类实现了Callable<String>,所以我向您展示了call 方法:
@Override
public String call() throws Exception {
Thread.sleep(2000);
return "OK";
}
对Thread.sleep(2000); 的调用实际上是对Web 服务器的调用以发送一些数据。
问题是ResultActivity 直到call 调用返回时才显示其布局。
这段代码缺少什么?
【问题讨论】:
标签: android multithreading android-layout android-activity java.util.concurrent