方法运行时显示进度条

时间:2016-06-18 09:31:02

标签: android

我正在创建一个记录音频的应用。如果它记录了很长时间,那么需要花一些时间为它写入标题(波形文件)。我希望在发生这种情况时显示进度条,但它没有显示。似乎在运行方法时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()需要一段时间才能运行,我希望在此期间显示进度条。 我该如何解决?

1 个答案:

答案 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();