【Android源码学习】子线程更新UI

来源:互联网 发布:黑马程序员贴吧 编辑:程序博客网 时间:2024/06/04 19:48

一直都认为子线程不能更新UI,觉得这是Android系统规定的,所以也没想过为什么。直到今天刷题时看到一个言论说在onResume之前子线程是可以更新UI的。经测试,确实如此,并且在onResume时也可以用子线程更新UI,在onPause或点击时都会报错。

public class MainActivity extends AppCompatActivity implements View.OnClickListener,Runnable{    private Button btn;    private TextView tv;    private String tag;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn=(Button)findViewById(R.id.btn_test);        btn.setOnClickListener(this);        tv=(TextView)findViewById(R.id.tv_test);        tag="onCreate时";        new Thread(this).start();    }    @Override    protected void onStart() {        super.onStart();        tag="onStart时";        new Thread(this).start();    }    @Override    protected void onResume() {        super.onResume();        tag="onResume时";        new Thread(this).start();    }    @Override    protected void onPause() {        super.onPause();        tag="onPause时";        new Thread(this).start();    }    @Override    public void onClick(View v) {        new Thread(this).start();    }    @Override    public void run() {        tv.setText(Looper.myLooper()==Looper.getMainLooper()?"主线程":"子线程"+tag+"更新UI成功了");    }}

网上的结论说是只要子线程有ViewRoot就可以更新UI,暂时没有看懂,Mark一下。
子线程也可以更新UI

0 0