Android ProgressDialog不工作。创建新活动时
我在这里搜索了大多数“progressDialog不工作”线程,但没有一个答案对我有效 我正在尝试创建一个新的活动,该活动调用在不同线程上执行的方法(最多需要30-5秒) 长期法是:Android ProgressDialog不工作。创建新活动时,android,Android,我在这里搜索了大多数“progressDialog不工作”线程,但没有一个答案对我有效 我正在尝试创建一个新的活动,该活动调用在不同线程上执行的方法(最多需要30-5秒) 长期法是: // in some other class public static LongDurationMethodWhichStartsAWorkedThread() { Runnable r = new FFThread(); Thread thread = new Thread(r); t
// in some other class
public static LongDurationMethodWhichStartsAWorkedThread() {
Runnable r = new FFThread();
Thread thread = new Thread(r);
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
我使用thread.join()等待工作线程执行,然后继续
但是,不显示任何消息
有人看到问题了吗?
LongDurationMethodWhichStartsAWorkedThread()
将立即返回,因为启动线程不是阻塞调用。因此,可能发生的情况是,您的进度对话框正在显示,然后几乎立即清除,这使您认为它根本没有显示
相反,您应该使用Thread/Handler或来实现长时间运行的操作并显示用户进度
关于如何实现它,虽然这肯定不是唯一的选择,但谷歌搜索“AsyncTask示例”将为您提供大量选择
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
// perform long running operation operation
return null;
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@Override
protected void onPostExecute(String result) {
// execution of result of Long time consuming operation
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
// Things to be done before execution of long running operation. For example showing ProgessDialog
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onProgressUpdate(Progress[])
*/
@Override
protected void onProgressUpdate(Void... values) {
// Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
}
}
私有类LongOperation扩展了异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
//执行长时间运行操作
返回null;
}
/*(非Javadoc)
*@see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@凌驾
受保护的void onPostExecute(字符串结果){
//执行耗时较长的操作的结果
}
/*(非Javadoc)
*@see android.os.AsyncTask#onPreExecute()
*/
@凌驾
受保护的void onPreExecute(){
//在执行长时间运行的操作之前要做的事情。例如显示ProgessDialog
}
/*(非Javadoc)
*@请参阅android.os.AsyncTask#onProgressUpdate(Progress[])
*/
@凌驾
受保护的void onProgressUpdate(void…值){
//正在执行长时间运行的操作时要执行的操作。例如更新ProgessDialog
}
}
问题在于,当您从主线程调用thread.join()时,您的UI线程被阻塞。所以它不能向您显示任何对话框,因为它只是在等待您的工作线程何时完成。我可以向你推荐两件事:
嗨,蒂姆。我在几个小时前读到,对于需要几秒钟以上的操作,没有指示使用AsyncTask。我的需要超过30秒。你认为这会是一个问题吗?我从来没有见过这样的东西,你能链接到你读它的地方吗?
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
// perform long running operation operation
return null;
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@Override
protected void onPostExecute(String result) {
// execution of result of Long time consuming operation
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
// Things to be done before execution of long running operation. For example showing ProgessDialog
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onProgressUpdate(Progress[])
*/
@Override
protected void onProgressUpdate(Void... values) {
// Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
}
}