我正在创建一个记录音频的应用。如果它记录了很长时间,那么需要花一些时间为它写入标题(波形文件)。我希望在发生这种情况时显示进度条,但它没有显示。似乎在运行方法时UI被卡住了。
这是您点击“停止录制”时的代码:
ProgressBar Bar = (ProgressBar)findViewById(R.id.Bar);
TextView loadingTxt = (TextView)findViewById(R.id.loading);
Bar.setVisibility(View.VISIBLE);
loadingTxt.setAlpha(1f);
AppLog.logString("Stop Recording");
stopRecording();
Toast.makeText(getApplicationContext(), R.string.stoppedRecording, Toast.LENGTH_LONG).show();
Bar.setVisibility(View.GONE);
loadingTxt.setAlpha(0f);
方法stopRecording()需要一段时间才能运行,我希望在此期间显示进度条。 我该如何解决?
答案 0 :(得分:2)
你需要在这里使用AsyncTask。它在后台线程中执行繁重的操作,因为在单独的线程中调用doInBackground方法。
final ProgressBar Bar = (ProgressBar)findViewById(R.id.Bar);
final TextView loadingTxt = (TextView)findViewById(R.id.loading);
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
Bar.setVisibility(View.VISIBLE);
loadingTxt.setAlpha(1f);
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
//Toast.makeText(getApplicationContext(), R.string.stoppedRecording, Toast.LENGTH_LONG).show();
Bar.setVisibility(View.GONE);
loadingTxt.setAlpha(0f);
}
@Override
protected Void doInBackground(Void... params) {
stopRecording();
return null;
}
}.execute();