一个线程来显示Android的

进度对话框下面是代码的一些位:一个线程来显示Android

public class ShowDialog extends Thread { 

private static String mTitle="Please wait";

private static String mText="Loading...";

private Activity mActivity;

private ProgressDialog mDialog;

ShowDialog(Activity activity) {

this(activity, mTitle, mText);

}

ShowDialog(Activity activity, String title) {

this(activity, title, mText);

}

ShowDialog(Activity activity, String title, String text) {

super();

mText=text;

mTitle=title;

mActivity=activity;

if (mDialog == null) {

mDialog = new ProgressDialog(mActivity);

mDialog.setTitle(mTitle);

mDialog.setMessage(mText);

mDialog.setIndeterminate(true);

mDialog.setCancelable(true);

mDialog.setOnCancelListener(

new DialogInterface.OnCancelListener() {

@Override

public void onCancel(DialogInterface arg0) {

mDialog.dismiss();

interrupt();

}

});

}

}

public void run() {

mDialog.show();

while(!isInterrupted())

mDialog.dismiss();

mDialog=null;

}

}

在我的主要活动:

ShowDialog show = new ShowDialog(this, "Please wait!","Loading badly..."); 

show.start();

SystemClock.sleep(2000);

show.interrupt();

我知道我可能使用异步任务和所有东西,但这不是我想要的。将SystemClock.sleep替换为需要一些时间的任何事情。这个想法是在UI线程中执行开始和中断之间的代码,并创建一个独立的线程来处理ProgressDialog。 我的线程有什么问题?

非常感谢!

回答:

要等待线程完成,您应该使用Thread.join()方法。但现在我看到你不想等待它完成,但是你需要控制它何时完成。尽管如此,你仍然希望避免以这种方式中断线程。

在你ShowDialog类中,添加一个dismiss()方法,你可以从你的main调用,而不是interrupt()。还要添加一个boolean dismiss = false实例变量。在dismiss()中,添加dismiss = true,然后notify();。在run()中,用while(!dismiss){wait()}替换常量while()循环(不断运行,效率非常低)。您仍然需要添加同步块和异常处理,但这应该让您有一个良好的开端。

这里是一个通用的Java(非Android)简单例子:

public static class ShowDialog extends Thread{ 

protected boolean dismiss;

public void dismiss(){

dismiss = true;

synchronized(this){

notifyAll();

}

}

@Override

public void run(){

System.out.println("Running...");

// Show your dialog here.

while(!dismiss){

synchronized(this){

try{

wait();

}catch(InterruptedException ie){

ie.printStackTrace();

}

}

}

System.out.println("Quitting...");

// Dismiss your dialog here.

}

}

public static void main(String[] args) throws Exception{

ShowDialog sd = new ShowDialog();

sd.start();

Thread.sleep(2000);

sd.dismiss();

}

你提到你不想使用AsyncTask,但我仍然会重新考虑。 (你有什么反对的理由?)

以上是 一个线程来显示Android的 的全部内容, 来源链接: utcz.com/qa/266544.html

回到顶部