安卓子线程更新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 onCreateBundle savedInstanceState { super.onCreatesavedInstanceState; setContentViewR.layout.activity_looper; textView = TextView findViewByIdR.id.textView1; myThread.start; textView.setOnClickListenernew OnClickListener { @Override public void onClickView v { myThread.start; } }; } class MyThread extends Thread { @Override public void run { textView.setText"Update ui"; } } }

你可以在线程里面加一句睡眠几秒的代码试一下,应该会出现子线程更新ui的错误日志了。因为你是直接在oncreate方法里面开启线程,这个时候还没有对viewRootImpl实例化,所以不会检查是否是主线程。其实所谓不能在子线程更新ui只是官方强烈建议,你要更新也可以,前提是官方自己都没有对是否是子线程check得很好。

并没有什么规定不能在子线程里更新UI,而是不建议在子线程里更新UI,因为在非UI线程更新UI是不安全的线程安全问题,线程同步处理不好会带来不可预知的问题。你现在的代码逻辑不复杂,不存在UI线程与子线程同步的问题,所以你觉得没问题实际上也没问题,但还是不符合规范的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注