如何立即执行指令/法ProgressDialog解散后?(How to execute an ins

2019-09-29 06:02发布

我试图执行方法doSomeWork(); 后ProgressDialog驳回在我的方法printing(); 这似乎是由其他方法重叠在对话框未露面。 如果我评论的方法doSomeWork(); 直到线程完成正确显示该对话框。

这里是我的方法printing();

  public void printing()
{

    final ProgressDialog printingDialog = ProgressDialog.show(this, "Printing...", "Please wait", true, false);

    new Thread(new Runnable() {
        @Override
        public void run() 
        {

          //something big executing here
        }
        }).start();

}

他是我的方法doSomework()

    public void doSomeWork(){

        Thread receiptPrint = new Thread(new Runnable() {

            @Override
            public void run() {

               //something here

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //another dialog here
                    }
                });

            }
            });
}

在这里,你可以看到我是如何调用这两个方法:

    private OnClickListener onClickPrint = new OnClickListener() {

    public void onClick(final View v) {

            Log.d("Button","Clicked on Print Order Button");

                    printing();
                    doSomeWork();

有谁知道我怎么能执行doSomeWork()仅在printing(); 将彻底完蛋了?

Answer 1:

这是一个的目的之一AsyncTask 。 这将类似于此:

public void onClick(final View v) {

    new AsyncTask<Void, Void, Void>() {

        @Override
        protected void onPreExecute() {

            //Show your progress dialog in here
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground( Void... params ) {

            printing();
            return null;
        }

        @Override
        protected void onPostExecute( Void result ) {

            //Dismiss your progress dialog here
            doSomeWork();
        }
    }.execute();
}


Answer 2:

而不是使用线程你可以使用异步任务。 显示在preexecute方法进度对话框调用后台方法里面的印刷方法完成postexecute方法内打印操作调用doSomeWork()之后。



Answer 3:

您可以使用Handler在android系统为。 例如考虑下面的一段代码。 你可以辞退内部处理程序对话框。 它可以为你工作。

private void printing(){
  Thread receiptPrint = new Thread(new Runnable() {

        @Override
        public void run() {
            retrieveEmails();

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                  try{
                      //here your code executes
                      //after code executes do following:
                      uiHandler.sendEmptyMessage(0);
                  }catch(Exception ex){
                      errorHandler.sendEmptyMessage(0);
                  }
                }
            });

        }
  });
  receiptPrint.start();
}

final Handler uiHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
            //here execute doSomeWork()
    }
};

final Handler errorHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
            //do other stuff
    }
};


文章来源: How to execute an instruction/method immediately after ProgressDialog dismisses?