Могу ли я запустить два процесса в главном потоке одновременно - PullRequest
1 голос
/ 10 мая 2019

У меня проблема с mainthread. То, что я пытаюсь сделать, - это показать alerttdilog с сообщением «печать» во время выполнения задания на печать (печать и отображение alerttdialog выполняются одновременно). Проблема в том, что alerttdialog не отображается, пока печать не будет завершена. Я должен упомянуть, что в главном потоке должны выполняться и alerttdialog, и задание на печать (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 голосов
/ 15 июля 2019

Если вы хотите показать диалоговое окно с предупреждением во время печати, я предлагаю вам использовать AsyncTask.У него есть несколько методов, которые вы можете переопределить:

onPreExecute() - ( Необязательный метод ) Перед выполнением фоновой операции мы должны показать что-то на экране, например, индикатор прогресса или любую анимацию для пользователя.мы можем напрямую инициировать фоновую операцию, используя doInBackground (), но для лучшей практики мы должны вызывать все методы asyncTask.Здесь вы можете начать показывать диалоговое окно с предупреждением.

doInBackground(Params) - ( Обязательный метод ) В этом методе мы должны выполнить фоновую операцию в фоновом потоке.Операции в этом методе не должны касаться каких-либо основных операций или фрагментов.Выполните фактическую работу печати здесь.

onPostExecute(Result) - ( Необязательный метод ) В этом методе мы можем обновить пользовательский интерфейс результата фоновой операции.Закройте диалоговое окно с предупреждением.

onProgressUpdate(Progress…) - ( Необязательный метод ) При выполнении фоновой операции, если вы хотите обновить некоторую информацию в пользовательском интерфейсе, мы можем использовать этот метод.

...