android - 安卓子线程更新UI
PHP中文网
PHP中文网 2017-04-17 15:38:55
[Android讨论组]

代码如下,为什么可以通过子线程更新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");
        }
        
    }
    
}
PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
ringa_lee

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

PHPz

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号