Android Studio 处理程序问题
Android Studio Handler issue
Runnable job = new Runnable()
{
@Override
public void run()
{
randomNumber = rand.nextInt(99) + 1;
arrayList.add(randomNumber);
textArrayList.setText("" + arrayList);
textRandomNumber.setText("" + randomNumber);
if (gameOptionNumber < arrayList.size())
{
layoutGameButton.setVisibility(View.VISIBLE);
}
mHandler.postDelayed(this, 3000);
}
};
mHandler.post(job);
...
else if(v == buttonEnter)
{
if(output.getText().length() != 0)
{
temp = Integer.parseInt(output.getText().toString());
compareNumber(temp);
output.setText("");
}
}
}
此处的文本视图每 3 秒更改一次,我必须输入之前的数字。数字每 3 秒更改一次,但当用户在数字更改前 3 秒内未按任何按钮时,它应该停止。是否有我可以在处理程序中调用的声明,例如 mHandler.cancel()
或其他内容?
您需要从处理程序中删除回调:
检查条件并删除回调
handler.removeCallbacks(job);
mHandler.removeCallbacks(job);
mHandler.postDelayed(job, 3000);
这将删除此可运行对象的挂起回调并添加最新的回调。如果用户不按超过 3 秒,它将 post 运行并执行工作。
您需要这样做:
private Handler handler;
private Runnable job;
何时需要停止发布runnable:
if(handler!=null){
handler.removeCallbacks(job);
}
还在 onStop 上添加代码:
@Override
public void onStop() {
super.onStop();
if(handler!=null){
handler.removeCallbacks(job);
}
}
希望对您有所帮助。
Runnable job = new Runnable()
{
@Override
public void run()
{
randomNumber = rand.nextInt(99) + 1;
arrayList.add(randomNumber);
textArrayList.setText("" + arrayList);
textRandomNumber.setText("" + randomNumber);
if (gameOptionNumber < arrayList.size())
{
layoutGameButton.setVisibility(View.VISIBLE);
}
mHandler.postDelayed(this, 3000);
}
};
mHandler.post(job);
...
else if(v == buttonEnter)
{
if(output.getText().length() != 0)
{
temp = Integer.parseInt(output.getText().toString());
compareNumber(temp);
output.setText("");
}
}
}
此处的文本视图每 3 秒更改一次,我必须输入之前的数字。数字每 3 秒更改一次,但当用户在数字更改前 3 秒内未按任何按钮时,它应该停止。是否有我可以在处理程序中调用的声明,例如 mHandler.cancel()
或其他内容?
您需要从处理程序中删除回调:
检查条件并删除回调
handler.removeCallbacks(job);
mHandler.removeCallbacks(job);
mHandler.postDelayed(job, 3000);
这将删除此可运行对象的挂起回调并添加最新的回调。如果用户不按超过 3 秒,它将 post 运行并执行工作。
您需要这样做:
private Handler handler;
private Runnable job;
何时需要停止发布runnable:
if(handler!=null){
handler.removeCallbacks(job);
}
还在 onStop 上添加代码:
@Override
public void onStop() {
super.onStop();
if(handler!=null){
handler.removeCallbacks(job);
}
}
希望对您有所帮助。