Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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 如何在活动开始时显示ProgressDialog?_Android_Android Asynctask_Android Activity_Progressdialog - Fatal编程技术网

Android 如何在活动开始时显示ProgressDialog?

Android 如何在活动开始时显示ProgressDialog?,android,android-asynctask,android-activity,progressdialog,Android,Android Asynctask,Android Activity,Progressdialog,我将打开活动(名称为VideoAcivity)。此活动正在进行一些视频处理并显示视频。我知道如何使用progressdialog,我已经在我的活动之间使用progressdialog,但是如果没有AsyncTask,onPreExecute,onPostExecute,我就无法使用progressdialog。我想在不使用AsyncTask的情况下启动活动时显示progressdialog,因为我在此活动中使用了线程 super.onCreate(savedInstanceSt

我将打开活动(名称为VideoAcivity)。此活动正在进行一些视频处理并显示视频。我知道如何使用progressdialog,我已经在我的活动之间使用progressdialog,但是如果没有
AsyncTask
onPreExecute
onPostExecute
,我就无法使用progressdialog。我想在不使用
AsyncTask
的情况下启动活动时显示progressdialog,因为我在此活动中使用了线程

         super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_video);
     txtDisplay = (TextView) findViewById(R.id.textView1);
     getin = getIntent();
     video = getin.getStringExtra("Video_URL");
     subtitle = getin.getStringExtra("Subtitle_URL");
          mPreview = (SurfaceView)findViewById(R.id.surfaceView1);
     holder = mPreview.getHolder();
     holder.setFixedSize(800, 480);
     holder.addCallback(this);
     holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);       
     mediaPlayer = new MediaPlayer();
     mediaPlayer.setOnPreparedListener(this);
     mediaController = new MediaController(this);

       } // this is oncrete 
// ---> mediaplyer and mediacontroller codes..

public void onPrepared(MediaPlayer mediaPlayer) {
         Log.d(TAG, "onPrepared");
         mediaController.setMediaPlayer(this);
         mediaController.setAnchorView(findViewById(R.id.surfaceView1));

         handler.post(new Runnable() {
           public void run() {
             mediaController.setEnabled(true);
             mediaController.show();
           }
         });
       }

Thread th = new Thread(new Runnable() {

                @Override
                public void run() {
                // Codes..
        }
            });

         th.start();
         th.join();
我尝试添加一些代码并调试,无论我尝试了什么,当活动开始时ProgressDialog都不会出现。我找不到原因。它在过程的最后一段时间出现。(所有过程耗时7-8秒,仅出现1秒)我哪里做错了?我应该在哪里添加进度对话框代码?希望你能帮助我


提前感谢

声明GetProgressDialog并将其放入onCreate方法中-

progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Loding");
progressDialog.show();
progressDialog.setCancelable(false);
当你的后台任务完成时-

progressDialog.dismiss();

当线程停止或在后台完成任务时,需要某种回调。在
asynctask
中,您将获得
onPostExecute
方法,它在主UI线程上运行,因此您可以关闭
progressDialog
或执行其他UI操作。但在线程的情况下,你没有这样的方法

您需要确定线程何时停止,如果您仍在线程中,则使用此选项-

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        progressDialog.dismiss();
    }
});

您正在工作线程上调用
Thread.join()
方法,似乎是从主线程调用的。这将使主线程等待工作线程完成。在此期间,它将无法正确更新UI。Android需要主线程来自由显示ProgressDialog


使用
Thread.join()
这里,您想实现什么?尝试移除它,看看会发生什么。

非常感谢,但我已经尝试过了。但它只出现了一秒钟。我调试了progressdialog代码,这些代码可以正常工作,但同时无法正常工作。怎么可能我不明白谢谢你的编辑和信息=)但还是一样,我把它放在线程完成时没有改变的地方(显示时间只有一秒,但我的进程需要7-8秒)。我的问题是启动progressDialog,不知何故它启动得很晚。你把
progressDialog.show()
:放在给定作业/任务的开始、中间或几乎结束的地方了吗?在
onCreate(Bundle savedInstanceState)
方法的开始,我之所以放它是因为,首先
线程th
应完成其作业,然后当前线程
线程。当前线程将继续。在
线程th
中,我正在将字幕下载到SD卡中,当SD卡下载字幕时,只有
线程th
必须工作。否则,播放机在没有字幕的情况下播放,将导致错误(播放机.addtimedtextsource()的null错误
thread.join()
阻止当前线程,直到接收者完成其执行并死亡。我在活动开始时,在新线程
th.start
th.join
工作之前,放置
ProgressDialog
对话框,但没有显示任何内容。这与
thread.join()无关
。谢谢