我有一个与后端 Web 服务对话的 Androd 应用程序。作为测试的一部分,我需要在按下提交按钮时模拟不同长度的客户端延迟。
现在,我在我的 OnClickListener 中使用 Thread.sleep() 作为我的提交按钮,但是像这样休眠 UI 线程会导致应用程序看起来完全“冻结”的意外后果 - 按钮一直突出显示直到线程醒来,我的 ProgressBar 同样完全冻结。这是我的代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_checkout);
pBar = (ProgressBar) findViewById(R.id.progressBar1);
pBar.setVisibility(View.INVISIBLE);
Button submitButton = (Button) findViewById(R.id.btnSubmit);
submitButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pBar.setVisibility(View.VISIBLE);
try {
Thread.sleep(3000); //eventually this delay will be random
//right now it obviously hangs the UI
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
performMyAppSpecificWorkHere();
pBar.setVisibility(View.INVISIBLE);
CheckoutActivity.this.finish();
}
});
}
我正在寻找可以在不挂起整个 UI 的情况下模拟延迟的方法。欢迎任何想法。谢谢!
编辑
这里有一些澄清!我需要做的一部分是模拟延迟并允许用户界面干净地处理它(这是现在没有发生的事情)。
即...如果客户端或 Web 服务出现延迟,客户端应通过在等待时让微调器旋转来处理它。模拟后端延迟的能力已经完成,并且可以按照我想要的方式工作,但我想在客户端模拟延迟而不挂起 UI 线程。