我的主线程有问题。 我正在尝试做的是在打印任务运行时显示带有消息“ printing”的alertdilog(打印和显示alertdialog是同时进行的)。 问题是直到完成打印后才显示alertdialog。 我应该提到,alertdialog和打印任务都需要在主线程(getActivity.runonuithread .....)中运行。
我的问题是,我可以在主线程中同时运行两个不同的任务吗?
我尝试在后台线程中运行打印任务,但无法正常工作。打印需要很长时间,并且会停止整个过程。
private void SWIPE1() {
new Thread(new Runnable() {
@Override
public void run() {
//some code
ImpresssionDialog()
ImpressionTicket();
}}).start();
private void ImpresssionDialog() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
optionDialogimp = new ProgressDialog(getContext());
String alert1 = "Impression .....";
new AlertDialog.Builder(getActivity());
optionDialogimp.setTitle(alert1);
optionDialogimp.show();
optionDialogimp.setCanceledOnTouchOutside(false);
}
});
}
private void ImpressionTicket() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
//printing process ....
}});
}
谢谢您的帮助。
答案 0 :(得分:0)
如果要在打印时显示警报对话框,建议您使用AsyncTask。它有一些您可以覆盖的方法:
onPreExecute()
-(可选方法),在进行后台操作之前,我们应该在屏幕上显示一些东西,例如进度条或任何动画给用户。我们可以在doInBackground()上直接减少后台操作,但是为了最佳实践,我们应该调用所有asyncTask方法。在这里,您可以开始显示警报对话框。
doInBackground(Params)
-(强制方法),在这种方法中,我们必须在后台线程上执行后台操作。此方法中的操作不应涉及任何主线程活动或片段。在这里进行实际的打印工作。
onPostExecute(Result)
-(可选方法),在此方法中,我们可以更新后台操作结果的ui。关闭警报对话框。
onProgressUpdate(Progress…)
-(可选方法)在进行后台操作时,如果要更新UI上的某些信息,我们可以使用此方法。