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);
   }
}

希望对您有所帮助。