关于在子线程更新UI的问题

u014228584 2017-09-30 04:46:52
代码:
public class MainActivity extends AppCompatActivity {
private Button button;
private TextView textview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
textview = (TextView) findViewById(R.id.text);

new Thread(){
@Override
public void run() {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textview.setText("你好");
}
});
}
}.start();

}
今天复习了下关于线程更新UI的内容,写了个程序发现在子线程能更新UI,后来再看下书本和自己写的,原来是脑抽了居然把监听事件放在了线程里面,现在疑惑的是如果按照我这样写,为什么能在子线程更新UI而不报错呢?
...全文
247 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
星空之路 2017-10-03
  • 打赏
  • 举报
回复
setOnClickListener(new View.OnClickListener() { 这句话,是安桌做好了封装的,人家是在主线程更新UI的,不是在线程上更新的
江三木洛 2017-09-30
  • 打赏
  • 举报
回复
引用 1 楼 u014228584 的回复:
把代码改成如下, textview.setText("你好" + Thread.currentThread().getName());输出的是“你好main”,说明是在主线程中更改UI的,但从代码来看不是在子线程中吗?
因为你在子线程做的只是给回调方法设值,并没有真正的在子线程里调用,真正在哪个线程里更新UI是要看调用onClick的方法是在哪个线程里调用的 如果 new Thread(){ @Override public void run() { textview.setText("你好"); }.start(); 这么写才是在子线程更新UI
u014228584 2017-09-30
  • 打赏
  • 举报
回复
把代码改成如下, textview.setText("你好" + Thread.currentThread().getName());输出的是“你好main”,说明是在主线程中更改UI的,但从代码来看不是在子线程中吗?

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧