java 线程间隔时间_如何在Android中以定义的时间间隔运行Runnable线程?

我开发了一个应用程序,在Android模拟器屏幕中以定义的间隔显示一些文本。 我正在使用Handler类。 以下是我的代码中的代码段:

handler = new Handler();

Runnable r = new Runnable() {

public void run() {

tv.append("Hello World");

}

};

handler.postDelayed(r, 1000);

当我运行此应用程序时,文本只显示一次。 为什么?

#1楼

Handler handler=new Handler();

Runnable r = new Runnable(){

public void run() {

tv.append("Hello World");

handler.postDelayed(r, 1000);

}

};

handler.post(r);

#2楼

如果我正确理解Handler.post()方法的文档:

导致Runnable r添加到消息队列中。 runnable将在连接此处理程序的线程上运行。

所以@ alex2k8提供的例子即使工作正常也不一样。 如果使用Handler.post() ,则不会创建新线程 。 您只需将Runnable发布到具有Handler的线程即可由EDT执行。 之后,EDT只执行Runnable.run() ,没有别的。

记住: Runnable != Thread 。

#3楼

我相信这种典型情况,即以固定间隔运行某些东西, Timer更合适。 这是一个简单的例子:

myTimer = new Timer();

myTimer.schedule(new TimerTask() {

@Override

public void run() {

// If you want to modify a view in your Activity

MyActivity.this.runOnUiThread(new Runnable()

public void run(){

tv.append("Hello World");

});

}

}, 1000, 1000); // initial delay 1 second, interval 1 second

使用Timer有几个优点:

可以在schedule函数参数中轻松指定初始延迟和间隔

只需调用myTimer.cancel()就可以停止计时器

如果您只想运行一个线程,请记住在安排新线程之前调用myTimer.cancel() (如果myTimer不为null)

#4楼

对您的示例的简单修复是:

handler = new Handler();

final Runnable r = new Runnable() {

public void run() {

tv.append("Hello World");

handler.postDelayed(this, 1000);

}

};

handler.postDelayed(r, 1000);

或者我们可以使用普通线程(使用原始Runner):

Thread thread = new Thread() {

@Override

public void run() {

try {

while(true) {

sleep(1000);

handler.post(this);

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

};

thread.start();

您可以将runnable对象视为可以发送到消息队列以执行的命令,并将handler作为用于发送该命令的辅助对象。

#5楼

new Handler().postDelayed(new Runnable() {

public void run() {

// do something...

}

}, 100);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值