gpt4 book ai didi

java - ProgressDialog不会显示 - 多线程

转载 作者:行者123 更新时间:2023-12-01 12:55:53 24 4
gpt4 key购买 nike

我试图在主线程中启动 ProgressDialog,但它根本不会显示。流程是这样的,我在主线程中启动 ProgressDialog,然后启动一个执行某些操作的线程。操作完成后,ProgressDialog 将关闭。

我的代码如下:

主类:

final ProgressDialog ringProgressDialog = ProgressDialog.show(someclass.this, "Please wait ...",    "Configuring...", true);
ringProgressDialog.setCancelable(true);
spinnerThread t = new spinnerThread(this, ringProgressDialog);
t.start(); //Dialog won't show
try {
t.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent i = new Intent("org.CameraDemo"); //Activity won't start and the app itself closes
i.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);
finish();

线程类:

class spinnerThread extends Thread {
ProgressDialog progress;
someclass someobject;

public spinnerThread(someclass someobject,
ProgressDialog progress) {
super();
this.someobject= someobject;
this.progress = progress;
}

@Override
public void run() {
someobject.action1();
someobject.action2();
someobject.action3();
progress.dismiss();
}
}

要求投反对票的人至少提及原因。因为没有理由,人们无法知道问题中缺少什么。

最佳答案

您正在创建并启动的 spinnerthread 上调用 join(),这将阻塞 UI 线程,直到 spinnerthread 完成其工作。该对话框不会出现,因为尽管您在 Activity 中正确创建并初始化了它,但您在主 UI 线程在执行其他操作(例如实际显示对话框)之前等待的 spinnerthread 中将其关闭。

如果您在开始新 Activity 之前尝试做一些重要的工作(这可能会导致 ANR),我建议使用 AsyncTask 因为它比简单线程功能更丰富。您将在 onPreExecute() 回调中初始化并显示 ProgressDialog,在 doInBackground() 回调中执行工作,然后关闭对话框并在 onPostExecute() 回调中启动新 Activity 。

您仍然可以使用普通线程,但需要删除 join() 调用,然后在 thespinnerthread 的 run() 末尾启动新 Activity 方法。

关于java - ProgressDialog不会显示 - 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23905215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com