Android - 仅在 AsyncTask 未完成时单击按钮时显示进度对话框
Posted
技术标签:
【中文标题】Android - 仅在 AsyncTask 未完成时单击按钮时显示进度对话框【英文标题】:Android - Display Progress Dialog on button click ONLY if AsyncTask has not completed 【发布时间】:2017-09-02 19:06:54 【问题描述】:我正在构建一个 OCR android 应用程序,该应用程序在后台执行许多图像处理任务,这需要一些时间才能完成。 它执行的步骤如下:
-
捕获图像
向用户显示图像,提供重新捕获图像或继续操作的选项
显示处理后的图像,提供重新捕获图像或继续的选项。
提取文本
这些任务非常耗时,我想通过在前一个任务完成后立即开始下一个任务来减少一些时间,同时仅当用户单击继续按钮并且任务已完成时才显示进度对话框“请稍候”未完成。
我想知道这是否可能,如果可以,我该如何实现?
以下是我的 OCR 任务代码:
private class OCRTask extends AsyncTask<Void, Void, String>
ProgressDialog mProgressDialog;
public OCRTask(PreviewActivity activity)
mProgressDialog = new ProgressDialog(activity);
@Override
protected String doInBackground(Void... params)
String path = previewFilePath;
String ocrText;
OCR ocr = new OCR();
ocrText = ocr.OCRImage(path, PreviewActivity.this);
// Write the result to a txt file and store it in the same dir as the temp img
// find the last occurence of '/'
int p=previewFilePath.lastIndexOf("/");
// e is the string value after the last occurence of '/'
String e=previewFilePath.substring(p+1);
// split the string at the value of e to remove the it from the string and get the dir path
String[] a = previewFilePath.split(e);
String dirPath = a[0];
String fileString = dirPath + "ocrtext.txt";
File file = new File(fileString);
try
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(ocrText);
bw.close();
System.out.println("done!!");
catch (IOException i)
i.printStackTrace();
new WordCorrect(fileString);
return ocrText;
@Override
protected void onPreExecute()
// Set the progress dialog attributes
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setMessage("Extracting text...");
mProgressDialog.show();
@Override
protected void onPostExecute(String result)
// dismiss the progress dialog
mProgressDialog.dismiss();
Intent i;
i = new Intent(PreviewActivity.this, ReceiptEditActivity.class);
// Pass the file path and text result to the receipt edit activity
i.putExtra(FILE_PATH, previewFilePath);
Log.e("OCR TEXT: ", result);
i.putExtra(OCR_TEXT, result);
// Start receipt edit activity
PreviewActivity.this.startActivityForResult(i, 111);
finish();
@Override
protected void onProgressUpdate(Void... values)
非常感谢任何帮助或指导!
【问题讨论】:
【参考方案1】:只需在 Activity 或 Fragment 中取一个布尔变量,例如
public static boolean isTaskRunning = false;
并在 AsyncTask 的 onPreExecute() 内部,将其值更改为 true。
YourActivity.isTaskRunning = true;
我正在考虑您在活动课程中使用了这个变量。并在 onPostExecute(String result) 内部,将其值恢复为 false
YourActivity.isTaskRunning = false;
现在,单击按钮时,检查此变量值,如果其 true 则显示您的 进度对话框,否则不显示。
【讨论】:
以上是关于Android - 仅在 AsyncTask 未完成时单击按钮时显示进度对话框的主要内容,如果未能解决你的问题,请参考以下文章