安卓子线程更新UI

发布于 2022-09-02 01:04:04 字数 1014 浏览 32 评论 0

代码如下,为什么可以通过子线程更新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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

身边 2022-09-09 01:04:04

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

冰雪梦之恋 2022-09-09 01:04:04

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文