我可以同时在主线程中运行两个进程吗

时间:2019-05-10 12:13:20

标签: multithreading alertdialog

我的主线程有问题。 我正在尝试做的是在打印任务运行时显示带有消息“ 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 ....
   }});

}

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果要在打印时显示警报对话框,建议您使用AsyncTask。它有一些您可以覆盖的方法:

onPreExecute()-(可选方法),在进行后台操作之前,我们应该在屏幕上显示一些东西,例如进度条或任何动画给用户。我们可以在doInBackground()上直接减少后台操作,但是为了最佳实践,我们应该调用所有asyncTask方法。在这里,您可以开始显示警报对话框。

doInBackground(Params)-(强制方法),在这种方法中,我们必须在后台线程上执行后台操作。此方法中的操作不应涉及任何主线程活动或片段。在这里进行实际的打印工作。

onPostExecute(Result)-(可选方法),在此方法中,我们可以更新后台操作结果的ui。关闭警报对话框。

onProgressUpdate(Progress…)-(可选方法)在进行后台操作时,如果要更新UI上的某些信息,我们可以使用此方法。