从Android AlertDialog的显示理解 run() 和 start() 的使用

今天安卓应用中完善一个查询功能,要达到的效果是点击“查询”按钮之后,先弹出“正在查询”的提示框,然后启动一个线程查询数据,待查询完成之后发送message通知关闭提示框。

原来的代码如下:

alertDialog.show();
								
queryThread = new QueryThread();
queryThread.start();
queryThread.run();

关于线程,先调用start(), 然后调用run(),当然,这是脑子里想当然的做法。

实际效果是对话框没有弹出来,可是为什么对话框不弹出来?代码看上去简单得不能再简单了。

线程里面的方法再怎么改都弹不出来,观察控制台,发现这个查询查出来的记录好像太多了,原来是查了两遍!到这里,似乎有点眉目了,就从这个查了两遍入手。

查了两遍,说明是查询的方法调用了两次,但是观察run方法里,就是写了一次查询而已。那么查了两次的原因很可能就是分别调用了start()和run()这两个方法了!


然后换个思路,把run()的调用去掉了,结果对话框正常地弹出来了,并且在查询结束之后也正常关闭了。

alertDialog.show();
								
queryThread = new QueryThread();
queryThread.start();
//queryThread.run();

总算在实践中体会到了run和start的区别了:

要让线程启动执行任务,只要调用start()就可以了。如果显式调用了run(),那么其实效果就是普通调用,并没有启动线程,相当于又执行了一次任务。


从Android AlertDialog的显示理解 run() 和 start() 的使用_第1张图片


你可能感兴趣的:(从Android AlertDialog的显示理解 run() 和 start() 的使用)