线程与(textView和progressbar)

时间:2013-12-19 18:46:20

标签: java android multithreading textview

我在Android中编写应用程序,在那里我从麦克风获取数据,它工作正常,我能够保存声音的振幅。我可以更新进度条。

  barraThread = new Thread(new Runnable() {
        public void run(){
            while (isRecording){
                actualizarBarra(getAmplitud()); 
                //lector.setText(String.valueOf(getAmplitud()));

            }   
        }   
    },"barra Thread");

-Where:actualizarBarra(getAmplitud());用实际幅度更新进度条的值。

我的问题是,如果我尝试从那一点更新textView,我会收到错误(

  

“只有创建视图层次结构的原始线程才能触及它   意见“。

所以我尝试使用“处理程序”更新textView并使用“runOnUiThread(new Runnable(){...”但应用程序运行速度非常慢,有时会崩溃。你知道更新进度条的方法吗? textview同时,以适当的方式?,

非常感谢

使用runOnUiThread解决方案。

private void actualizarInterfaz() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {   
                actualizarBarra(getAmplitud());
                    lector.setText(String.valueOf(getAmplitud()));
            }
        });
    }

然后循环:

 while(isRecording){
   actualizarInterfaz(); 
 } 

没有错误,只是应用程序被冻结,所以我在LogCat上看不到任何日志,就像正常运行但实际上没有。 感谢

1 个答案:

答案 0 :(得分:1)

您应该仅在UI(主)线程上更新TextView。处理程序方法是可以的(还有其他方法)。至于性能问题,我怀疑录制的频繁更新。尝试在更新视图时引入延迟,而不是每次都更新