编程语言
首页 > 编程语言> > 为何处理程序未按预期触发警报?

为何处理程序未按预期触发警报?

作者:互联网

我需要我的应用在用户按下按钮后的指定时间段内触发警报.该文档使它看起来像Handler是我所需要的,并且用法似乎死了.

但是,我发现尽管使用了postDelayed,我的例程仍在立即运行.我知道我缺少明显的东西,但是我看不到.为什么下面的代码使电话立即振动而不是等待一分钟?

 ...

   final Button button = (Button) findViewById(R.id.btnRun);
   final Handler handler = new Handler();

   button.setOnClickListener(new OnClickListener() {

   public void onClick(View v) {             
        ...
        handler.postDelayed(Vibrate(), 60000);

        }         
    });
...

    private Runnable Vibrate() {
    Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
    v.vibrate(300);
    return null;
   }

解决方法:

那是因为您做错了方法.只看流程:

handler.postDelayed(Vibrate(),60000)将立即调用Vibrate()方法,然后运行振动器.实际上,Vibrate()返回null吗?您认为处理程序将使用null引用做什么?您很幸运,它不会引发NullPointerException.关于如何正确实现处理程序的例子太多了…在Google上再多挖一些.

private class Vibrate implements Runnable{
  public void run(){
    Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
    v.vibrate(300);
  }
}

然后:

handler.postDelayed(new Vibrate(), 60000);

标签:postdelayed,handler,alerts,android
来源: https://codeday.me/bug/20191023/1915276.html