赞
踩
最近遇到一个错误,小错误,但有可能经常不注意的地方,我们都知道大多数情况下我们都是在子线程进行耗时操作,在主线程更新UI。因此我们有很多子线程耗时操作的东西出现(说了句废话); 我来说说我遇到的问题情况,
- new Thread(new Runnable() {
- @Override
- public void run() {
- String numgo = EDITGO.getText().toString().trim();
- Log.w("Main", "num" + numgo);
- if (numgo.equals("")) {
-
-
- Toast.makeText(contextPub, "不能为空", Toast.LENGTH_SHORT).show();
-
-
- } else {
- String sOut = ComS2.ES_LotteryGoOut(Integer.valueOf(numgo));
- DuihuakuangShow(sOut);
- }
- }
- }).start();
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
貌似上面的问题没有错 ,上面代码的意思很简单,就是我开启一个子线程,然后拿到输入框的值,进行非空的判断,然后Toast提示一下,不为空执行我的一串口的耗时操作。整体下来没毛病啊老铁,初级程序员啊。。。。。。。。。。。。
因为我们在子线程,不能执行Ui主线程。。。toast是在主线程显示的东西。。。。。。所以............、
解决办法使用
runOnUiThread(new Runnable() { @Override public void run() {
在这使用Toase
} });
runOnUiThread 看这个东西 单看名就能理解了 run(这个东西) on (回到 ) UI (ui) Thread (线程) 回到主线程Ui线程执行动作,哈哈,我是这么理解的,正确的代码
- new Thread(new Runnable() {
- @Override
- public void run() {
- String numgo = EDITGO.getText().toString().trim();
- Log.w("Main","num"+numgo);
- if(numgo.equals("")){
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- Toast.makeText(contextPub,"不能为空",Toast.LENGTH_SHORT).show();
- }
- });
- }else {
- String sOut = ComS2.ES_LotteryGoOut(Integer.valueOf(numgo));
- DuihuakuangShow(sOut);
- }
- }
- }).start();
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
runonUIThread 只不过是其中一种 你也可能开启Handler 执行 ,
其实把问题用大白话说就是 子线程执行耗时操作,主线程执行刷新UI.你要使用那个工具回到主线程执行Ui刷新就可以了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。