从Android AlertDialog的显示理解 run() 和 start() 的使用
2015-06-08 15:54
417 查看
今天安卓应用中完善一个查询功能,要达到的效果是点击“查询”按钮之后,先弹出“正在查询”的提示框,然后启动一个线程查询数据,待查询完成之后发送message通知关闭提示框。
原来的代码如下:
关于线程,先调用start(), 然后调用run(),当然,这是脑子里想当然的做法。
实际效果是对话框没有弹出来,可是为什么对话框不弹出来?代码看上去简单得不能再简单了。
线程里面的方法再怎么改都弹不出来,观察控制台,发现这个查询查出来的记录好像太多了,原来是查了两遍!到这里,似乎有点眉目了,就从这个查了两遍入手。
查了两遍,说明是查询的方法调用了两次,但是观察run方法里,就是写了一次查询而已。那么查了两次的原因很可能就是分别调用了start()和run()这两个方法了!
然后换个思路,把run()的调用去掉了,结果对话框正常地弹出来了,并且在查询结束之后也正常关闭了。
总算在实践中体会到了run和start的区别了:
要让线程启动执行任务,只要调用start()就可以了。如果显式调用了run(),那么其实效果就是普通调用,并没有启动线程,相当于又执行了一次任务。
原来的代码如下:
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文件读写操作
- android:padding和android:layout_margin的区别?
- Android 高级Drawable资源---复合Drawable----层Drawable
- Android中的AlarmManager的使用
- android google服务框架安装
- Android Studio 导入so
- Android Studio: Android Manifest doesn't exists or has incorrect root tag
- [Selenium] Android HTML5 中 Application Cache
- Android 控件之ProgressBar进度条
- pc android sqlcipher 加密
- android setContentView() 、LayoutInflater的区别
- Android中如何使用Cursor遍历Sqlite
- ListView的相关研究(一)
- Android raw to bmp
- [Selenium] Android HTML5 中 Web Storage
- Android OnMeasure
- android Path类
- [Android] 使用JSON和SharedPreferences存储用户自定义类
- android实习期日常笔记(一)
- at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:)