在Android服务中创建未使用的实例变量

时间:2011-12-07 17:16:31

标签: android service instance-variables

我正在开发一个Android应用程序,它有一个服务侦听某些事件并在后台记录它们。由于我记录了几个事件,因此我为每个要记录的事件类型创建了一个记录器类。以下是一个这样的课程。

public class AccelerometerLogger {

  private final Context mContext;
  private final SensorManager mSensorManager;
  private final Sensor mAccelerometer;
  private final AccelerometerListener mAccelerometerListener;

  public AccelerometerLogger(Context context) {
    super(context);
    mContext = context;
    mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
    mAccelerometer = getAccelerometer();
    mAccelerometerListener = new AccelerometerListener();
    boolean status = false;
    if (mAccelerometer != null) {
      status = mSensorManager.registerListener(mAccelerometerListener, mAccelerometer,
          SensorManager.SENSOR_DELAY_NORMAL);
    }
    Log.i("AccelerometerLogger", "Regisrtered = " + status);
  }

  private Sensor getAccelerometer() {
    List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
    if (sensors.size() > 0) {
      return sensors.get(0);
    }

    return null;
  }

  private class AccelerometerListener implements SensorEventListener {
    long lastTime;
    long now;

    AccelerometerListener() {
      now = lastTime = 0;
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
      now = event.timestamp; //timestamp is in nanoseconds
      if (now - lastTime > 5000000000l) {
        // Log some stuff here
      }
    }
  }
}

现在,在服务的onCreate()中我做了

AccelerometerLogger accelerometerLogger = new AccelerometerLogger(getApplicationContext());

但我永远不需要使用accelerometerLogger,因为该对象隐含地完成了构建后的所有工作,并且只要服务执行就会挂起。虽然这种方法似乎对我有用,但总会有一个未使用的局部变量的警告。有没有更好的方法来完成我想做的事情?

感谢您抽空帮助我。

谢谢, 普拉迪普

2 个答案:

答案 0 :(得分:0)

如果您使用日食,您可以将其置于声明之上。

@SuppressWarnings("unused")
AccelerometerLogger accelerometerLogger = new AccelerometerLogger();

我想因为提供了这个注释,创建未使用的对象不会被视为邪恶或任何东西。警告真的很烦人,所以他们有这些注释很棒。

答案 1 :(得分:0)

编辑在OP的评论中澄清,这是在分配给服务类中的字段而不是局部变量,我的答案不再适用。


你可以做到

new AccelerometerLogger();

本身。