我将打开Activity(名称为VideoAcivity)。此活动正在进行一些视频处理并显示视频。我知道如何使用进度对话框,我已经在我的活动之间使用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秒)我在哪里做错了?我应该在哪里添加进度对话框代码?希望你能帮帮我..
提前致谢
答案 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()
来完成什么?尝试删除它,看看会发生什么。