Android更新TextView中的Thread和Runnable

我想在Android中创建一个简单的计时器,每秒更新一个TextView。它只是计数秒像在扫雷。

问题是当我忽略tvTime.setText(…)(使它的//tvTime.setText(…),在LogCat将打印以下数字每秒。
但是当我想设置这个数字到一个TextView(在另一个线程中创建),程序崩溃。

有没有人有一个想法如何解决这个很容易?

这里是代码(方法在启动时调用):

private void startTimerThread() {
    Thread th = new Thread(new Runnable() {
        private long startTime = System.currentTimeMillis();
        public void run() {
            while (gameState == GameState.Playing) {
                System.out.println((System.currentTimeMillis() - this.startTime) / 1000);
                tvTime.setText("" + ((System.currentTimeMillis() - this.startTime) / 1000));
                try {
                    Thread.sleep(1000);
                }
                catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    });
    th.start();
}

编辑:

最后,我得到了。
这里是解决方案,对于那些有兴趣的人。

private void startTimerThread() {       
    Thread th = new Thread(new Runnable() {
        private long startTime = System.currentTimeMillis();
        public void run() {
            while (gameState == GameState.Playing) {                
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        tvTime.setText(""+((System.currentTimeMillis()-startTime)/1000));
                    }
                });
                try {
                    Thread.sleep(1000);
                } 
                catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    });
    th.start();
}
UserInterface只能由UI线程更新。你需要一个Handler,发布到UI线程:

private void startTimerThread() {
    Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        private long startTime = System.currentTimeMillis();
        public void run() {
            while (gameState == GameState.Playing) {  
                try {
                    Thread.sleep(1000);
                }    
                catch (InterruptedException e) {
                    e.printStackTrace();
                }
                handler.post(new Runnable(){
                    public void run() {
                       tvTime.setText("" + ((System.currentTimeMillis() - this.startTime) / 1000));
                }
            });
            }
        }
    };
    new Thread(runnable).start();
}
http://stackoverflow.com/questions/12716850/android-update-textview-in-thread-and-runnable

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Android更新TextView中的Thread和Runnable