Android 不使用线程更新TextView值,为什么?

Android 不使用线程更新TextView值,为什么?,android,multithreading,Android,Multithreading,它只是在文本视图中显示一个数字 但要求是,它应该生成随机数,并在500毫秒后继续更新textview 谢谢大家! 代码中的主要问题是,您只能在主线程中更新UI,并且您正在使用自定义线程 第二个问题是你正在使用Thread.sleep,这是一个非常糟糕的练习 我建议你使用Handler TextView output; int i; Random random=new Random(); @Override protected void onCreate(Bundle

它只是在文本视图中显示一个数字 但要求是,它应该生成随机数,并在500毫秒后继续更新textview
谢谢大家!

代码中的主要问题是,您只能在主线程中更新UI,并且您正在使用自定义线程

第二个问题是你正在使用Thread.sleep,这是一个非常糟糕的练习

我建议你使用Handler




TextView output;
int i;
    Random random=new Random();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        output=findViewById(R.id.textView);
        new Thread(new mythread()).start();
        }

        class mythread implements Runnable{

            @Override
            public void run() {
try {
                    while(true) {
                        i = random.nextInt(100);
                        output.setText(i + "");
                        Thread.sleep(500);
                    }
    }catch (Exception e){}
       }
     }
  }
这里是kotlin版本

Handler handler = new Handler();
Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    Log.d("Handler", "Running Handler");
                    handler.postDelayed(this, 500);
                }
            }

handler.postDelayed(runnable, 0);

试试这个,我想它会解决你的问题

    var handler = Handler()
    var runnable = object : Runnable {
        override fun run() {
            Log.d("Handler", "Running Handler");
            handler.postDelayed(this, 500)
        }
    }
    handler.postDelayed(runnable, 500)

非常感谢,但我需要一个最简单的程序形式,可以使用thread生成随机数,并且可以使用thread.sleep()严格更新我的代码方法我是android开发的新手,一个月前刚刚开始,我正在一步一步地学习这个方法,只需要像这样的简单程序,谢谢,这是一个更简单、更干净的解决方案,你可以使用,我建议你阅读处理程序文档=)相信我,你能提供完整的代码来解决我的问题吗?你以前告诉过我的那些处理程序概念?这将对我更有帮助,在此基础上,我将学习与此相关的新事物!!提供一个没有一行解释的解决方案对社区是没有用的,这不是一个解决其他练习的平台,而是他帮助和学习的,谢谢
public class MainActivity extends AppCompatActivity {

        private Random random;
        private Handler handler;
        private TextView textView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView = findViewById(R.id.tv_number);
            displayRandomNumber();
        }

        /**
         * Display random number in text view
         */
        private void displayRandomNumber()
        {
            random = new Random();
            handler = new Handler();

            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    int value = random.nextInt();
                    textView.setText(String.valueOf(value));
                    handler.postDelayed(this,2000);
                }
            }, 2000);
        }
    }