我希望在开关打开时每500毫秒重复一次功能。但是当我运行我的代码时,当我打开电源时,一切都会冻结。这是我的代码:
mySwitch.setChecked(false);
mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
pom = true;
while (pom) {
final Handler h = new Handler();
final int delay = 1000;
h.postDelayed(new Runnable(){
public void run(){
myClient.SendData("AA");
h.postDelayed(this, delay);
}
}, delay);
}
}
else{
pom = false;
}
}
});
我也试过这个,现在我的应用程序没有冻结,现在它崩溃了:
mySwitch.setChecked(false);
mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
pom = true;
while (pom) {
int delay = 0; // delay for 0 sec.
int period = 500; // repeat every 10 sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
myClient.SendData("AA");
}
}, delay, period);
}
}
else{
pom = false;
}
}
});
答案 0 :(得分:0)
问题是你在这里陷入无限循环。
while (pom) {
final Handler h = new Handler();
final int delay = 1000;
h.postDelayed(new Runnable(){
public void run(){
myClient.SendData("AA");
h.postDelayed(this, delay);
}
}, delay);
}
程序无法退出此循环,因为pom始终为true。 它停止响应。
这将解决您的问题:
在sharedPreferences中保存切换状态,并将Runnable发布到活动中的任何位置。仅当sharedPreferences中的值为true时才发送数据。