我有一个奇怪的问题。我想每秒更新一次通知文本,所以我写了这段代码

    new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                                batteryTemperature = getBatteryTemperature();

                    new Handler().postDelayed(this, 1000);

                }
            }, 1000);

       if(batteryTemperature != 0) {

builder.setContentText("BatteryLevel"+batteryTemperature);
} else {
builder.setContentText("The batteryTemperature value is 0");
}


我看到一个Log,在Handler中,batteryTemperature值不同于0,但是在Handler中,它返回0。为什么?如何在通知中设置正确的值?

最佳答案

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    batteryTemperature = getBatteryTemperature();
                    handler.postDelayed(this, 1000);
                }
 }, 1000);


不要在每次调用Runnable时都创建一个Handler。每次执行runnable时,您都需要执行此代码段

  if(batteryTemperature != 0) {
   builder.setContentText("BatteryLevel"+batteryTemperature);
  } else {
    builder.setContentText("The batteryTemperature value is 0");
  }

07-28 03:26