Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过for()循环和处理程序不断更新文本_Android_Loops_Textview_Handler_Freeze - Fatal编程技术网

Android 通过for()循环和处理程序不断更新文本

Android 通过for()循环和处理程序不断更新文本,android,loops,textview,handler,freeze,Android,Loops,Textview,Handler,Freeze,我正在为自己做一个测试项目,只是为了了解更多信息,所以现在我需要通过(;)循环,每隔250毫秒不断更新TextView的文本,它发生在单击按钮之后。。。我的问题是,每当我按下该按钮时,我的应用程序就会冻结(是的,我的按钮完全正常工作,通过之前的测试进行验证),我正在使用一个处理程序,以确保主线程在Runnable启动时不受影响。。。这是我的按钮和处理程序代码 final Handler handler = new Handler(); B3.setOnClickListener(

我正在为自己做一个测试项目,只是为了了解更多信息,所以现在我需要通过(;)循环,每隔250毫秒不断更新
TextView
的文本,它发生在单击按钮之后。。。我的问题是,每当我按下该按钮时,我的应用程序就会冻结(是的,我的按钮完全正常工作,通过之前的测试进行验证),我正在使用一个处理程序,以确保主线程在
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){

                                }
                        }

                        }
                    }
                });
                }

        });

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

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

Android不允许您在主线程中执行长任务。如果您需要执行类似操作,我建议将for循环和depdendent代码移动到单独的线程中。

使用
处理程序.postDelayed
每250毫秒不断更新textview,而不是使用
for循环
,以避免冻结当前活动,如下所示:

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);  
     }  
 }; 

使用
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);  
     }  
 }; 

我们都以相同的方式回答:)因此我删除了我的答案。这会导致编译错误<代码>可运行内部
可运行
声明给出了
未初始化
错误。@Sudhanshu:没有得到你的解释@ρ∑ρK耶。我的Android Studio给了我一个错误
runnable可能没有在
处理程序行上初始化
。postDelayed(…
,阻止我编译项目@ρ∑ρєK,我必须使用answer解决它。我们都以相同的方式回答:)因此我删除了我的答案。这会导致编译错误<代码>可运行
内部
可运行
声明给出了
未初始化
错误。@Sudhanshu:没有得到你的解释@ρ∑ρK耶。我的Android Studio在
处理程序行上给了我一个错误
runnable可能没有初始化
。postDelayed(…
),阻止我编译项目@ρ∑ρєK,我必须使用answer解决它。