我有下面的代码,其显示3 ... 2 ... 1启动一个线程:如何暂停/恢复或停止一个线程和显示弹出
...
final Handler handler = new Handler();
final TextView textView = (TextView) findViewById(R.id.textView2);
final java.util.concurrent.atomic.AtomicInteger n = new AtomicInteger(3);
final Runnable counter = new Runnable() {
@Override
public void run() {
textView.setText(Integer.toString(n.get()));
if(n.getAndDecrement() >= 1)
handler.postDelayed(this, 1000);
else {
textView.setVisibility(View.GONE);
tv.post(new Roller(900)); //tv is a textView
}
}
};
handler.postDelayed(counter, 1000);
...
ImageButton ibStop;
ibStop.setOnClickListener(...() {
//stop the thread
//display a popup
});
ImageButton ibPause;
ibPause.setOnClickListener(...() {
//pause the thread
//display a popup
});
ImageButton ibPlay;
ibPlay.setOnClickListener(...() {
//display the `handler` above with the 3...2...1...
//resume the thread
});
可运行:
private class Roller implements Runnable
{
private long delayMillis;
private Boolean stop = false;
public Roller(long delayMillis)
{
this.delayMillis = delayMillis;
}
@Override
public void run()
{
int min = 0;
int max = 1;
int n = rand.nextInt(max - min + 1) + min;
String roll = String.valueOf(n);
tv.setText("Random number is " + roll); //tv is a textview
if (roll.equals("0")) {
inType = 0;
ibRed.setImageResource(R.drawable.red_selector);
ibGreen.setImageResource(R.drawable.green_dark);
}
if (roll.equals("1")) {
inType = 1;
ibRed.setImageResource(R.drawable.red_dark);
ibGreen.setImageResource(R.drawable.green_selector);
}
tv.postDelayed(this, delayMillis);
}
}
请帮助我停止和暂停/恢复线程。
如果要暂停或继续运行,必须放置一个标记变量并将其更改。 – Alon