0

UIは非常にシンプルで、ボタンloginとスクロール可能なTextViewのみがあり、ボタンを押すloginと100行のメッセージがTextViewに追加されますが、同時に追加されます。メッセージを処理する必要があるためですこれは TextView に追加されますが、これには数時間がかかります。アプリが応答していないように見える場合があります。メッセージが TextView に 1 行ずつ追加されることを願っています。IOW TextView が各ループに追加されたメッセージ行を表示することを望みます。どうすればそれを理解できますか?簡略化されたメインコードは次のとおりです。

login.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        for(int i = 0; i < 100; i++) {
            mTextView.append("test\n");
        }
    }
}
4

4 に答える 4

0

UI 要素を変更するものはすべて、UI スレッドで実行する必要があります。長時間ループを実行しているため、アプリがフリーズします。デザインを変更し、ループ内で UI を更新しないようにするか、run a を使用background threadしてテキストを追加しStringBuilder、ループが終了したら StringBuilder テキストを mtextView に追加する必要があります。

繰り返しますが、StringBuilder に非常に大きなテキストが含まれている場合、それを UI に更新すると再びフリーズする可能性があります。

于 2012-04-07T14:33:44.387 に答える
0
login.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
       mTextView.setText(""); 
       for(int i = 0; i < 100; i++) {
            mTextView.setText(mTextView.getText()+"test\n");
        }
    }
}

動作するはずのこのコードを試してください

于 2012-04-07T14:19:36.820 に答える
0

これを使って:

    login.setOnClickListener(new OnClickListener() {
       public void onClick(View v) {

       mTextView.setText(""); 
if (!isStopped) { 

       Acitivut.this.runOnUiThread(new Runnable() {  
        @Override  
        public void run() {   
        for(int i = 0; i < 100; i++) {
          mTextView.append("test\n");
         }
isStopped=true; 
        }  
        });  
}
      }
    }
于 2012-04-07T14:21:50.420 に答える
0
login.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
           i=0; 
           Thread thread=new Thread(new SleepThread());
           thread.start();
    }
}

private class SleepThread implements Runnable
{
         public void run()
         {
              sleep(10);
              handler.sendEmptyMessage();
         }
}

Handler handler=new Handler()
{
     public void handleMessage(Message msg)
     {
         mTextView.append("test\n");
         i++;
         if(i<100)
         {
              Thread thread=new Thread(new SleepThread());
              thread.start();
         }
     }
}
于 2012-04-07T14:37:33.607 に答える