我正在创建一个按钮,在使用处理程序的延迟功能抓取两个相等的光值持续2秒后停止光传感器。它起初工作正常但是当我再次按下按钮时,延迟似乎变得越来越短,最终根本不会发生。
stateLx.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
onResume();
stateLx.setEnabled(false);
doub2x.setText(Double.toString(0));
doub1x.setText(Double.toString(0));
//Stabilization Handlers
m_handler = new Handler();
m_handlerTask = new Runnable() {
public void run() {
doub1 = movingValue[0];
doub1x.setText(Double.toString(doub1));
m_handler.postDelayed(this, 1000);
}
};
m2_handler = new Handler();
m2_handlerTask = new Runnable() {
public void run() {
doub2 = movingValue[0];
doub2x.setText(Double.toString(doub2));
m2_handler.postDelayed(this, 2000);
if (doub1 != doub2) {
instructions.setText("unequal");
} else {
instructions.setText("equal");
getInitialLightValue();
reCalculateInitial();
beerLambert(volValues, lxValuesNew);
}
}
};
//Handlers for stabilizer
m_handler.postDelayed(m_handlerTask, 1000);
m2_handler.postDelayed(m2_handlerTask, 3000);
lame.setText(Double.toString(absorbValues[0]));
stateLx.setEnabled(true);
}
});
我已尝试将处理程序放入onclick函数内外,并在按下按钮开始时包含onResume()函数,但我没有运气。我的代码有问题吗?
答案 0 :(得分:1)
您不断重新创建处理程序和Runnables。这是问题的一部分,您应该在重新开始之前检查您是否已经进行了轮询。
另外,这是一个旁注 - 但是调用生命周期方法很奇怪,比如onResume(),因为它会调用super。