Android 如何在活动开始时显示ProgressDialog?
我将打开活动(名称为VideoAcivity)。此活动正在进行一些视频处理并显示视频。我知道如何使用progressdialog,我已经在我的活动之间使用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
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()无关
。谢谢