为何处理程序未按预期触发警报?
作者:互联网
我需要我的应用在用户按下按钮后的指定时间段内触发警报.该文档使它看起来像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