0

我 正在 为 我 做 一个 测试 项目 , 以便 我 可以 了解 更多 , 所以 现在 我 需要TextView通过 一个 循环 每 250 毫秒更新 a 的 文本for(;;), 它 发生 在 按钮 单击 之后 ... 我 的 问题 是 每当 我按下该按钮我的应用程序冻结(是的,我的按钮完全正常工作,已通过先前的测试验证),我正在使用主线程的处理程序在启动时不会受到影响Runnable......这是我的按钮和处理程序代码...

final Handler handler = new Handler();
        B3.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View v) {

                handler.post(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        for(;;){
                            String a = Shells.sendSingleCommand("free");//Here I send a command "free" and it returns its output 
                            text.setText(a);//text is my TextView which is used through my experimentations ... 
                            synchronized(this){
                                try{
                                    wait(250);
                                }catch(Exception e){

                                }
                        }

                        }
                    }
                });
                }

        });

如果您需要更多信息,请询问:)

4

2 回答 2

3

用于handler.postDelayed每 250 毫秒不断更新 textview,而不是for loop用于避免冻结当前活动:

Handler handler=new Handler();
B3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                  handler.post(runnable);  
                }

        });
Runnable runnable=new Runnable(){  
  @Override  
    public void run() {  
       String a = Shells.sendSingleCommand("free");
       text.setText(a);
       handler.postDelayed(runnable, 250);  
     }  
 }; 
于 2013-02-08T13:29:04.070 回答
0

Android 不允许您在主线程中执行长任务。如果你需要做这样的事情,我建议将 for 循环和依赖代码移动到一个单独的线程中。

于 2013-02-08T13:18:44.360 回答