0

私は私のためにテストプロジェクトに取り組んでいます、ちょうど私がもっと学ぶことができるように、それで今私TextViewはループを通して常に250ミリ秒ごとにテキストを更新する必要があり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ミリ秒ごとにテキストビューを常に更新するために使用します。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 に答える