308_子线程操作UI方法
2016-10-12 21:14
246 查看
子线程操作UI方法
阅读郭霖大神博客的读书笔记
博客地址:http://blog.csdn.net/sinyu890807/article/details/9991569
1. Handler的post()方法
public final boolean post(Runnable r)
{
return sendMessageDelayed(getPostMessage(r), 0);
}
也是调用了sendMessageDelayed()方法去发送一条消息
private final Message getPostMessage(Runnable r) {
Message m = Message.obtain();
m.callback = r;
return m;
}
private final void handleCallback(Message message) {
message.callback.run();
}
因此在子线程中通过Handler的post()方法进行UI操作就可以这么写
new Thread(new Runnable() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
// 在这里进行UI操作
}
});
}
}).start();
2. View的post()方法
public boolean post(Runnable action) {
Handler handler;
if (mAttachInfo != null) {
handler = mAttachInfo.mHandler;
} else {
ViewRoot.getRunQueue().post(action);
return true;
}
return handler.post(action);
}
3. Activity的runOnUiThread()方法
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
阅读郭霖大神博客的读书笔记
博客地址:http://blog.csdn.net/sinyu890807/article/details/9991569
1. Handler的post()方法
public final boolean post(Runnable r)
{
return sendMessageDelayed(getPostMessage(r), 0);
}
也是调用了sendMessageDelayed()方法去发送一条消息
private final Message getPostMessage(Runnable r) {
Message m = Message.obtain();
m.callback = r;
return m;
}
private final void handleCallback(Message message) {
message.callback.run();
}
因此在子线程中通过Handler的post()方法进行UI操作就可以这么写
new Thread(new Runnable() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
// 在这里进行UI操作
}
});
}
}).start();
2. View的post()方法
public boolean post(Runnable action) {
Handler handler;
if (mAttachInfo != null) {
handler = mAttachInfo.mHandler;
} else {
ViewRoot.getRunQueue().post(action);
return true;
}
return handler.post(action);
}
3. Activity的runOnUiThread()方法
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
相关文章推荐
- android4.0以上访问网络不能在主线程中进行以及在线程中操作UI的解决方法
- winform线程间操作UI的五种方法
- wpf调用外部线程操作ui方法
- Silverlight端费时操作不阻塞UI线程处理方法
- 关于子线程里不能更新UI操作的解决方法
- !!c# 委托与多线程 -- 相比background来说,本方法针对当需要通过异步代理发起UI操作,而后线程中进行sleep操作的时使用
- android-----在子线程中更新UI操作的方法
- 工作线程操作UI线程元素的方法
- 在子线程中操作Ui的几种小方法
- Android 子线程操作更新UI方法
- android 访问网络不能在主线程中进行以及在线程中操作UI的解决方法
- 4种在线程中操作UI的方法
- Android开发之子线程操作UI的几种方法
- Java 线程的基本概念 创建方法 和 基本操作
- C#线程相关问题总结:基本操作及UI控件交互
- C#用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程
- 小结“线程间操作无效: 从不是创建控件的线程访问它” 错误的解决方法
- C# :线程中操作多控件 (委托实现异步及同步的方法)
- C# 子线程操作主窗体控件的解决方法
- 转 在非 UI线程中改变UI控件属性的通用方法