![](/img/trans.png)
[英]When off the main thread, how can I get some code to run on the main thread as quickly as possible?
[英]Can I run two processes in the main thread simultaneously
我的主线程有问题。 我想做的是在打印任务运行时显示带有消息“ 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 ....
}});
}
如果要在打印时显示警报对话框,建议您使用AsyncTask。 它具有一些您可以覆盖的方法:
onPreExecute()
-( 可选方法 )在执行后台操作之前,我们应该在屏幕上显示一些东西,例如进度条或任何动画给用户。 我们可以在doInBackground()上直接减少后台操作,但是为了最佳实践,我们应该调用所有asyncTask方法。 您可以在此处开始显示警报对话框。
doInBackground(Params)
-( 强制方法 )在此方法中,我们必须在后台线程上执行后台操作。 此方法中的操作不应涉及任何主线程活动或片段。 在这里进行实际的打印工作。
onPostExecute(Result)
-( 可选方法 )在此方法中,我们可以更新后台操作结果的ui。 关闭警报对话框。
onProgressUpdate(Progress…)
-( 可选方法 )在进行后台操作时,如果要更新UI上的某些信息,我们可以使用此方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.