我是android和java的新手。我在正确实施进度对话框时遇到了麻烦。
我有这样的代码
ProgressDialog dialog= new ProgressDialog(Main.this);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setMax(100);
dialog.show();
MY METHOD WHICH GRABS DATA FROM INTERNET;
dialog.dissmiss();
但通过实现这个,我的方法运行良好,但没有进度对话框是可见的,再次当我注释掉解除方法,对话框没有停止,我不得不强制关闭应用程序,然后如何使用此对话框?在aditional不想在这里带任何线程,有没有办法使用没有任何线程的对话框?感谢
答案 0 :(得分:4)
问题在于,任何长时间运行的任务(例如从Internet获取数据)必须在单独的线程内运行,否则如果代码运行超过5秒,则可能会获得ANR。我认为理想的解决方案是实现AsyncTask
:它允许您在单独的线程中运行任务,并帮助您轻松更新UI线程,显示ProgressDialog
或ProgressBar
s您的用户知道您的应用当前正忙。只需将所有ProgressDialog
初始化代码放在onPreExecute()
的{{1}}方法内,并AsyncTask
调用dialog.dismiss()
。希望这会有所帮助。
答案 1 :(得分:1)
是的,您不需要使用Thread类。您可以改用AsyncTask。在调用AsyncTask时启动进度对话框,在postExecute方法中将其关闭。
答案 2 :(得分:1)
我个人更喜欢AsyncTask进行进度对话。
在onPreExecute中,创建上面的代码。在doInBackground中,执行后台任务并在onPostExecute中显示一个表示已完成工作的alertdialog!