我有一个简单的活动,两个按钮“开”和“关”。我想开始改变背景的颜色,并用“On”按钮循环,并用“Off”按钮停止。此外,我需要点击“关”按钮才能看到红色。我写了简单的程序,一切都很好,但我不明白一件事。为什么最后一个颜色不总是红色?如果我在主线程循环使用代码如何返回主线程Android
Thread.sleep(100);
或
Thread.sleep(1000);
我总是有红色的,但如果我设置
Thread.sleep(10);
我有随机最后一种颜色。为什么??
谢谢!
我有这样的代码:
公共类MyActivity延伸活动{
final Handler myHandler = new Handler();
private int randColor;
final Runnable updateColor = new Runnable() {
public void run() {
final Random random = new Random();
randColor = Color.rgb(random.nextInt (255), random.nextInt (255), random.nextInt (255));
mRelativeLayout.setBackgroundColor(randColor);
}
};
private ColorChanger myThread;
class ColorChanger extends Thread {
private volatile boolean mIsStopped = false;
@Override
public void run() {
super.run();
do
{
if (!Thread.interrupted()) {
myHandler.post(updateColor);
}
else
{
return;
}
try{
Thread.sleep(100);
}catch(InterruptedException e){
return;
}
}
while(true);
}
public void stopThis() {
this.interrupt();
}
}
private RelativeLayout mRelativeLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
mRelativeLayout = (RelativeLayout)findViewById(R.id.relativeLayout);
}
public void onflagClick(View view) {
myThread = new ColorChanger();
myThread.start();
}
public void onflagoffClick(View view) throws InterruptedException {
myThread.interrupt();
if(myThread.isAlive())
{
try {
myThread.join();
} catch(InterruptedException e){
}
}
else
{
mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.redColor));
}
mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.redColor));
}
}
ima发表评论使用线程..你可以去我的个人资料,并查看我的答案我回答了关于背景和用户界面工作的问题..据我所知,它的1000是1秒,其余的都不到秒 – Elltz 2014-10-16 19:20:11