Android线程问题

时间:2016-09-15 15:54:05

标签: android

我在Android应用程序中运行线程时遇到一些问题,它应该显示一个对话框询问用户的内容,如果用户单击是,则在后台执行某些操作时应该出现加载对话框,我创建了一个线程但是当我单击“是”按钮时,UI仍会锁定,直到完成该过程。

代码: 对话框:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

            builder.setMessage("LOGO.bin Was Not Found, Would You Like To Extract It?")
                    .setTitle("LOGO Not Found!");

            builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                 getAndExtract();


                }
            });
            builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                   finish();
                   System.exit(0);
                }
            });


            AlertDialog dialog = builder.create();
            dialog.show();

getAndExtract:

 public void getAndExtract()
{

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    showLoad("Grabbing Logo...");

                    getLogo();
                    Thread.sleep(2000);
                    progressDialog.cancel();

                    showLoad("Extracting Images...");
                    extractImages();
                    Thread.sleep(2000);
                    progressDialog.cancel();
                }catch (InterruptedException iE)
                {
                    iE.printStackTrace();
                }
            }
        }).run();




}

showLoad:

progressDialog.setMessage(msg);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();

extractImages基础知识:

Command cmd = new Command(0, "LogoInjector -i " + getFilesDir() + "/LOGO.bin -d -g " + getFilesDir() + "/");

RootTools.getShell(true).add(cmd);

getLogo的基础知识:

Command cmd = new Command(0, "dd if=/dev/block/mmcblk0p" + partitionIndex + " of=" + getFilesDir() + "/LOGO.bin");

RootTools.getShell(true).add(cmd);

我也尝试将showLoad放在runOnUiThread中,但没有变化......如果我删除了progressDialog.cancel();它确实显示了加载对话框,但在提取已经完成之后。我按是,它只是挂起,直到getLogo()和extractImages()都完成

任何人都可以帮我找出为什么这不起作用吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

尝试使用AsyncTask:

    final AsyncTask<Void,Void,Void> asyncTask = new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {

            // do whatever you need to do in background

            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute( aVoid);

            // do after finished 
        }
    };
    asyncTask.execute();

希望有帮助=]