Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android线程问题_Android - Fatal编程技术网

Android线程问题

Android线程问题,android,Android,我在android应用程序中运行线程时遇到一些问题,它应该会显示一个对话框询问用户一些问题,如果用户单击“是”,则在后台执行操作时会出现一个加载对话框。我创建了一个线程,但当我单击“是”按钮时,UI仍然会锁定,直到进程完成 代码: 对话框: 获取和提取: public void getAndExtract() { new Thread(new Runnable() { @Override public void run() {

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

代码: 对话框:

获取和提取:

 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();




}
展示:

progressDialog.setMessage(msg);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
提取图像的基础知识:

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();它确实显示加载对话框,但在提取已经完成之后。我按下Yes,它会一直挂起,直到getLogo()和extractImages()都完成

有人能帮我找出为什么这不起作用吗

谢谢

尝试使用异步任务:

    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();
final AsyncTask AsyncTask=new AsyncTask(){
@凌驾
受保护的Void doInBackground(Void…参数){
//在后台做任何你需要做的事情
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
//完成后做什么
}
};
asyncTask.execute();
希望对您有所帮助=]

您是否尝试使用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();