バックエンド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スレッドをハングさせずに、クライアントで遅延をシミュレートしたいと思います。