安卓子线程更新UI
代码如下,为什么可以通过子线程更新UI.
package com.example.furtherhandler;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class LooperActivity extends Activity {
private MyThread myThread = new MyThread();
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_looper);
textView = (TextView) findViewById(R.id.textView1);
myThread.start();
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
myThread.start();
}
});
}
class MyThread extends Thread {
@Override
public void run() {
textView.setText("Update ui");
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你可以在线程里面加一句睡眠几秒的代码试一下,应该会出现子线程更新ui的错误日志了。因为你是直接在oncreate方法里面开启线程,这个时候还没有对viewRootImpl实例化,所以不会检查是否是主线程。其实所谓不能在子线程更新ui只是官方强烈建议,你要更新也可以,前提是官方自己都没有对是否是子线程check得很好。
并没有什么规定不能在子线程里更新UI,而是不建议在子线程里更新UI,因为在非UI线程更新UI是不安全的(线程安全问题),线程同步处理不好会带来不可预知的问题。你现在的代码逻辑不复杂,不存在UI线程与子线程同步的问题,所以你觉得没问题(实际上也没问题),但还是不符合规范的。