【发布时间】:2014-10-16 19:00:37
【问题描述】:
我有一个简单的活动,有两个按钮“开”和“关”。我想用“On”按钮开始循环改变背景颜色,用“Off”按钮停止。我还需要通过单击“关闭”按钮获得红色。我写了简单的程序,一切都很好,但我无法理解一件事。为什么最后一种颜色不总是红色?如果我在主线程循环中使用代码
Thread.sleep(100);
或
Thread.sleep(1000);
我总是有红色,但如果我设置了
Thread.sleep(10);
我有随机的最后一种颜色。为什么??
谢谢!!
我有这个代码:
公共类 MyActivity 扩展 Activity {
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 将此作为评论使用线程发布.. 您可以转到我的个人资料并查看我的答案休息时间不到几秒
标签: android multithreading android-activity