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