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

时间:2014-04-29 03:13:54

标签: android android-asynctask android-activity progressdialog

我将打开Activity(名称为VideoAcivity)。此活动正在进行一些视频处理并显示视频。我知道如何使用进度对话框,我已经在我的活动之间使用progressdialog但是我没有AsyncTaskonPreExecuteonPostExecute使用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秒)我在哪里做错了?我应该在哪里添加进度对话框代码?希望你能帮帮我..

提前致谢

2 个答案:

答案 0 :(得分:1)

获取progressDialog并将其放入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();
    }
});

答案 1 :(得分:0)

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

你想用Thread.join()来完成什么?尝试删除它,看看会发生什么。