Java 如何使用线程更新textview?

Java 如何使用线程更新textview?,java,android,Java,Android,我试图在3秒后更新textview,我想在我使用线程的循环中这样做…..我应该怎么做才能启动后台线程,以便在3秒后background1线程启动。。。它应该在一个循环中完成吗 package com.edu.math; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import

我试图在3秒后更新textview,我想在我使用线程的循环中这样做…..我应该怎么做才能启动后台线程,以便在3秒后background1线程启动。。。它应该在一个循环中完成吗

     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());
                }
            }
             }
    });
}
package com.edu.math;
导入android.app.Activity;
导入android.os.Bundle;
导入android.os.Handler;
导入android.os.Message;
导入android.util.Log;
导入android.widget.TextView;
公共课教育数学扩展活动{
文本视图;
文本视图电视;
文本视图数;
字符串x;
整数时间=3000;
浮动z;
int随机;
int-1;
int随机_算子=1;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txt=(TextView)findViewById(R.id.txt);
tv=(TextView)findViewById(R.id.randomNumber);
background.start();
}
//我们的经纪人
Handler=newhandler(){
public void handleMessage(Message msg){//在一行中显示每个项目
random=(int)Math.ceil(Math.random()*10);
random1=(int)Math.ceil(Math.random()*10);
如果(随机1>随机)
{
txt.setText(/*txt.getText()++*/“”+random1++>++++++++random+++
System.getProperty(“line.separator”);
}
其他的
{
txt.setText(/*txt.getText()++*/“”+random++++>+“”+random1+
System.getProperty(“line.separator”);
}
}
};
Handler handler1=新处理程序(){
@凌驾
public void handleMessage(Message msg){//在一行中显示每个项目
txt.setText(/*txt.getText()++*/“”+random1+“”+x+“”+random+System.getProperty(“line.separator”);
}
};
线程背景1=新线程(new Runnable(){
@凌驾
公开募捐{

对于(int i=0;i尝试使用java.util.Timer()

尝试使用java.util.Timer()

您必须使用AsyncTask来更改版面中的任何视图,但目前我对AsyncTask的经验很少。

您必须使用AsyncTask来更改版面中的任何视图,但目前我对AsyncTask的经验很少。

尝试本文中的解决方案……似乎就是您想要的。

在这篇文章中尝试解决方案。…似乎就是你要寻找的

你的问题是错误抛出了什么?还是错误输出?我的问题是错误输出…@vindaaron..你到底想做什么..在3秒后启动thread2..输出是什么,你期望得到什么输出?是的,我想在thread1之后以相等的间隔启动thread2,但现在当我这样做时,输出就来了2次正确,第3次输出错误…因为当时两个线程都处于活动状态。我想我可以通过使用计时器解决问题…但不知道如何解决。你的问题是错误抛出了什么?还是错误输出?我的问题是错误输出…@vindaaron..你到底想做什么..3秒后启动thread2..输出是什么,你期望得到什么样的输出?是的,我想在线程1之后以相等的间隔启动线程2,但现在当我这样做时,输出有2次是正确的,在第3次时它给出了错误的输出…因为当时两个线程都是活动的。我想我可以通过使用计时器来解决这个问题。但是我不知道怎么做。
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);
}
}