我在 android 中使用延迟处理程序,但它不起作用
I am using handler for delay in android but it's not working
我要延迟两秒。每 2 秒我想更改文本,为此,我正在使用这样的处理程序,但它不起作用,它只显示你好。它根本没有改变它只显示我写的第二个。代码是这样的,
private Handler handler = new Handler();
int i=5;
private TextView textView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.hello);
textView.setText("Android Things !!");
hello_first.run();
}
private Runnable hello_first = new Runnable() {
@Override
public void run() {
textView.setText("Nice Work");
handler.postDelayed(this,5000);
textView.setText("Hello");
handler.postDelayed(this,2000);
i = i+1;
if(i==5)
handler.removeCallbacks(this);
}
};
它很容易使用
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
textView.setText("Hello");
},2000);
handler.postDelayed(new Runnable() {
@Override
public void run() {
textView.setText("Nice Work");},5000);
试试这个代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.hello);
textView.setText("Android Things !!");
handler.postDelayed(hello_first,5000);
handler.postDelayed(hello_second,2000);
}
private Runnable hello_first = new Runnable() {
@Override
public void run() {
textView.setText("Nice Work");
}
};
private Runnable hello_second = new Runnable() {
@Override
public void run() {
textView.setText("Hello");
}
};
我希望这对你有用。
Handler handler = new Handler();
Runnable task = new Runnable() {
@Override
public void run() {
textView.setText("Nice Work");
handler.postDelayed(this,2000);
textView.setText("Hello");
handler.postDelayed(this,2000);
}
};
task.run();
停止任务
handler.removeCallbacks(task);
A Handler
allows you to send and process Message and Runnable objects
associated with a thread's MessageQueue.
纠正你的postDelayed
方法。
Causes the Runnable r to be added to the message queue, to be run
after the specified amount of time elapses.
演示结构
textView.setText("Nice Work");
final Handler handlerOBJ = new Handler();
handlerOBJ.postDelayed(new Runnable() {
@Override
public void run() {
// YOUR WORK
textView.setText("Hello");
}
}, 5000); // 5S delay
您可以登录并查看实际发生的情况...
每次你打电话handler.postDelayed(this, 5000);
它将创建两个 Runnable 实例并将它们发送到处理程序。所以队列中runnable的数量增加得非常快。
你可以设置一个文本列表和索引,然后把runnable丢给handler,postDealyed为2000毫秒。使用文本列表和索引查看应为文本视图设置哪些文本。
您使用的 postDelayed
不正确。看起来您希望它以与 Thread.sleep
相同的方式工作。然而事实并非如此。
这是您要实现的目标的正确实现:
private Handler handler = new Handler();
private TextView textView;
private int i = 0;
private boolean flip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.hello);
handler.post(hello_first);
}
private Runnable hello_first = new Runnable() {
@Override
public void run() {
if(++i == 5) {
handler.removeCallbacks(this);
return;
}
if(flip) {
textView.setText("Nice Work");
} else {
textView.setText("Hello");
}
flip = !flip;
handler.postDelayed(this, TimeUnit.SECONDS.toMillis(2));
}
};
我要延迟两秒。每 2 秒我想更改文本,为此,我正在使用这样的处理程序,但它不起作用,它只显示你好。它根本没有改变它只显示我写的第二个。代码是这样的,
private Handler handler = new Handler();
int i=5;
private TextView textView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.hello);
textView.setText("Android Things !!");
hello_first.run();
}
private Runnable hello_first = new Runnable() {
@Override
public void run() {
textView.setText("Nice Work");
handler.postDelayed(this,5000);
textView.setText("Hello");
handler.postDelayed(this,2000);
i = i+1;
if(i==5)
handler.removeCallbacks(this);
}
};
它很容易使用
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
textView.setText("Hello");
},2000);
handler.postDelayed(new Runnable() {
@Override
public void run() {
textView.setText("Nice Work");},5000);
试试这个代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.hello);
textView.setText("Android Things !!");
handler.postDelayed(hello_first,5000);
handler.postDelayed(hello_second,2000);
}
private Runnable hello_first = new Runnable() {
@Override
public void run() {
textView.setText("Nice Work");
}
};
private Runnable hello_second = new Runnable() {
@Override
public void run() {
textView.setText("Hello");
}
};
我希望这对你有用。
Handler handler = new Handler();
Runnable task = new Runnable() {
@Override
public void run() {
textView.setText("Nice Work");
handler.postDelayed(this,2000);
textView.setText("Hello");
handler.postDelayed(this,2000);
}
};
task.run();
停止任务
handler.removeCallbacks(task);
A
Handler
allows you to send and process Message and Runnable objects associated with a thread's MessageQueue.
纠正你的postDelayed
方法。
Causes the Runnable r to be added to the message queue, to be run after the specified amount of time elapses.
演示结构
textView.setText("Nice Work");
final Handler handlerOBJ = new Handler();
handlerOBJ.postDelayed(new Runnable() {
@Override
public void run() {
// YOUR WORK
textView.setText("Hello");
}
}, 5000); // 5S delay
您可以登录并查看实际发生的情况...
每次你打电话handler.postDelayed(this, 5000);
它将创建两个 Runnable 实例并将它们发送到处理程序。所以队列中runnable的数量增加得非常快。
你可以设置一个文本列表和索引,然后把runnable丢给handler,postDealyed为2000毫秒。使用文本列表和索引查看应为文本视图设置哪些文本。
您使用的 postDelayed
不正确。看起来您希望它以与 Thread.sleep
相同的方式工作。然而事实并非如此。
这是您要实现的目标的正确实现:
private Handler handler = new Handler();
private TextView textView;
private int i = 0;
private boolean flip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.hello);
handler.post(hello_first);
}
private Runnable hello_first = new Runnable() {
@Override
public void run() {
if(++i == 5) {
handler.removeCallbacks(this);
return;
}
if(flip) {
textView.setText("Nice Work");
} else {
textView.setText("Hello");
}
flip = !flip;
handler.postDelayed(this, TimeUnit.SECONDS.toMillis(2));
}
};