Android 更新UI——runOnUiThread()
2016-06-17 14:07
399 查看
在Android开发过程中,常需要更新界面的UI。而更新UI是要主线程来更新的,即UI线程更新。如果在主线线程之外的线程中直接更新页面显示常会报错。抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
而书上、视屏中讲的Handle+Thread,需要发送消息,接受处理消息(在回调方法中处理),比较繁琐。除此之外,还可以使用runOnUiThread方法。
下面代码
public class TestActivity extends Activity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.handler_msg);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// 模拟耗时的操作。
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 更新主线程UI
TestActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
btn.setText("更新完毕!");
}
});
}
}).start();
}
});
}
这个效果和Handle+Thread是一样的。。。喜欢哪个就看个人爱好了
而书上、视屏中讲的Handle+Thread,需要发送消息,接受处理消息(在回调方法中处理),比较繁琐。除此之外,还可以使用runOnUiThread方法。
下面代码
public class TestActivity extends Activity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.handler_msg);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// 模拟耗时的操作。
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 更新主线程UI
TestActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
btn.setText("更新完毕!");
}
});
}
}).start();
}
});
}
这个效果和Handle+Thread是一样的。。。喜欢哪个就看个人爱好了
相关文章推荐
- Starting Reload cups, upon starting avahi-daemon to make sure remote queues are populated [fail]
- UILabel 划线
- Looper Handler MessageQueue分
- RebornDB:下一代分布式Key-Value数据库-CSDN.NET
- LeetCode-334.Increasing Triplet Subsequence
- layout_*的一些注意事项
- webpack vuejs 和 vue-router 如何使用?
- UI复习大纲
- [OpenStack]Server status values
- self.edgesForExtendedLayout=UIRectEdgeNone;
- IOS UIImage图片拉伸技巧-resizableImageWithCapInsets
- 安卓错误提示Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead的解决方法
- leetcode n-queens
- Arduino ide 1.6.9 遇到的问题 error: 'TKD2' was not declared in this scope
- Hadoop可视化分析利器之Hue
- 关于Popwindow设置foucusable(true)后,软件盘弹不出来的问题
- Range Sum Query 2D - Immutable
- 浅析extendedLayout, automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars
- vue入门
- iOS: 使用CGContextRef,CGPath和UIBezierPath来绘画