2011-05-24 79 views
1

我想在3秒后更新textview,并且我想在循环中为此使用线程.....我应该怎么做才能启动后台线程,以便在3秒后完成background1线程开始......它应该在循环中完成?如何使用线程更新textview?

 package com.edu.math; 
    import android.app.Activity; 
    import android.os.Bundle; 
    import android.os.Handler; 
    import android.os.Message; 
    import android.util.Log; 
    import android.widget.TextView; 

    public class EduMath extends Activity { 
     TextView txt; 
     TextView tv; 
     TextView num; 
     String x; 
     int time = 3000; 
     float z ; 


    int random; 
      int random1; 
      int random_operator =1; 

    /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      txt=(TextView)findViewById(R.id.txt); 
      tv = (TextView)findViewById(R.id.randomNumber); 

      background.start(); 
     } 

     // our handler 
     Handler handler = new Handler() { 
     public void handleMessage(Message msg) {//display each item in a single line 

      random = (int)Math.ceil(Math.random()*10); 
      random1 = (int)Math.ceil(Math.random()*10); 

      if(random1>random) 
      { 
       txt.setText(/*txt.getText()+*/""+random1+" "+>+" "+random+" "+ 
System.getProperty("line.separator")); 
      } 
      else 
      { 
       txt.setText(/*txt.getText()+*/""+random+" "+>+" "+random1+ 
System.getProperty("line.separator")); 
      } 
     } 
    }; 

    Handler handler1 = new Handler() { 
     @Override 
     public void handleMessage(Message msg) {//display each item in a single line 


       txt.setText(/*txt.getText()+*/""+random1+" "+x+" "+random+System.getProperty("line.separator")); 

     } 
    }; 
    Thread background1 =new Thread(new Runnable() { 

     @Override 
     public void run() { 

      for(int i=0;i<10;i++) 
      { 
       try { 

        Thread.sleep(time); 
        // send message to the handler with the current message handler   

        handler1.sendMessage(handler1.obtainMessage()); 
        background.stop(); 
        Log.d("EduMath-enclosing_method", "thread started"); 
       } catch (Exception e) { 
        Log.v("Error", e.toString()); 
       } 
      } 

     } 
    }); 


    Thread background=new Thread(new Runnable() { 

     @Override 
     public void run() { 
      for(int i=0;i<10;i++) 
      { 
       try { 
        Thread.sleep(time); 

     // send message to the handler with the current message handler   
        handler.sendMessage(handler.obtainMessage()); 
             background1.start(); 
       } catch (Exception e) { 
        Log.v("Error", e.toString()); 
       } 
      } 
      } 
    }); 
} 
+0

WATS乌尔问题错误抛出?或错误的输出? – Kakey 2011-05-24 10:54:07

+0

我的问题是错误的输出... – vindaaron 2011-05-24 11:01:28

+0

@ vindaaron ..究竟是什么你想做.. 3秒后开始thread2 ..? – ngesh 2011-05-24 11:08:43

回答

1

必须使用的AsyncTask用于改变布局的任何意见,但在现在,我有非常的AsyncTask缺乏经验。

0
public class HandlerDemo extends Activity { 

ProgressBar bar; 

Handler handler=new Handler() { 
@Override 
public void handleMessage(Message msg) { 
    //add your text 
} 
}; 

AtomicBoolean isRunning=new AtomicBoolean(false); 


public void onStart() { 
    super.onStart(); 

    Thread background=new Thread(new Runnable() { 
    public void run() { 
    try { 

      Thread.sleep(3000); 
      handler.sendMessage(handler.obtainMessage()); 

} 
catch (Throwable t) { 
// just end the background thread 
} 
} 
}); 
isRunning.set(true); 
background.start(); 
} 
public void onStop() { 
super.onStop(); 
isRunning.set(false); 
} 
}