Java:为什么这有效?

Lis*_*nne -2 java android

这可能是一个愚蠢的问题,我的Java只是简陋的概率:-(但我不明白为什么这有效(它实际上是Android代码,但我认为这是一般的Java问题).

我不明白该对象mySensorEventListener是如何被实际创建的?

  • 我不明白下面的代码实际上是做什么的.
  • 如何调用此代码???
  • 什么时候叫???

这是我不理解的部分

public SensorListener mySensorEventListener = new SensorListener() {

    @Override
    public void onSensorChanged(int sensor, float[] values) {
        synchronized (this) {
        }
    }
    @Override
    public void onAccuracyChanged(int sensor, int accuracy) {
    }
};
Run Code Online (Sandbox Code Playgroud)

这是它所属的android Activity:

public class RouteMapActivity extends Activity implements IRegisterReceiver {
private SensorManager mSensorManager;
private MapView mapView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mapView = new MapView(this, provider.getTileSource()
            .getTileSizePixels(), resProxy, provider);

    mSensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
    mSensorManager.registerListener(mySensorEventListener,
            SensorManager.SENSOR_ORIENTATION,
            SensorManager.SENSOR_DELAY_FASTEST);

    setContentView(mapView);
}

public SensorListener mySensorEventListener = new SensorListener() {

    @Override
    public void onSensorChanged(int sensor, float[] values) {
        synchronized (this) {
            float mHeading = values[0];
            mapView.setMapOrientation(-mHeading);
        }
    }

    @Override
    public void onAccuracyChanged(int sensor, int accuracy) {
    }
};
Run Code Online (Sandbox Code Playgroud)

MBy*_*ByD 7

没有新的

正如在评论中指出的那样,new在第一行中,这种实例化称为匿名类.

我不明白下面的代码实际上是做什么的.

synchronized块确保传感器中的变化通知不会同时处理,而是一个接一个地处理.

如何调用此代码??? 什么时候叫???

此代码由方向的SensorManager更改调用.这是它注册的:

mSensorManager.registerListener(mySensorEventListener,
        SensorManager.SENSOR_ORIENTATION,
        SensorManager.SENSOR_DELAY_FASTEST);
Run Code Online (Sandbox Code Playgroud)