性能 - 从计时器线程更新UI而不阻止UI线程

时间:2015-09-25 23:50:53

标签: java android multithreading

我是android的新手,并且一直在阅读有关工作线程的一些内容而不是阻止UI线程。我正在玩一个简单的计时器应用程序,它启动一个线程,在创建活动时每秒更新一次textview。所以我的问题是,这些天最好的方法是什么。以下两个例子都有效,但有更好的(更有效/更多的Android)方式吗?

    final Handler handler = new Handler();

    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            seconds++;
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                     secondsTextView.setText(seconds);
                }
            });
            handler.postDelayed(this, 1000);
        }
    }, 1000);

    new Thread(){
        @Override
        public void run(){
            try{
                while(!isInterrupted()){
                    Thread.sleep(1000);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            seconds++;
                            secondsTextView.setText(seconds);
                        }
                    });
                }
            }catch(Exception e){
                Log.e("Activity1", e.toString());
            }
        }
    }.start();

1 个答案:

答案 0 :(得分:3)

更有效的方法是:

    timeOnTextView.postDelayed(new Runnable() {
      @Override
      public void run() {
        seconds++;
        timeOnTextView.postDelayed(this, 1000);
      }
    }, 1000);

在主应用程序线程上调用传递给run()的{​​{1}}的{​​{1}},因此您无需使用Runnable

postDelayed()实施runOnUiThread()以来,您不需要postDelayed()