Java 如何使用线程更新textview?
我试图在3秒后更新textview,我想在我使用线程的循环中这样做…..我应该怎么做才能启动后台线程,以便在3秒后background1线程启动。。。它应该在一个循环中完成吗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
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);
}
}