public float getProximity(){
CountDownLatch countDownLatch = new CountDownLatch(1);
MyThread thread = new MyThread();
thread.countDownLatch = countDownLatch;
thread.start();
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
return thread.proximity;
}
public class MyThread extends Thread{
public float proximity;
public CountDownLatch countDownLatch;
public void run(){
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
MySensorEventListener listener = new MySensorEventListener();
Looper.prepare();
listener.looper = Looper.myLooper();
listener.sensorManager = sensorManager;
Handler handler = new Handler();
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME, handler);
Looper.loop();
proximity = listener.proximity;
countDownLatch.countDown();
}
};
public class MySensorEventListener implements SensorEventListener {
public Looper looper;
public SensorManager sensorManager;
public float proximity;
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
public void onSensorChanged(SensorEvent event) {
proximity = event.values[0];
sensorManager.unregisterListener(this);
looper.quit();
}
}
上面的代码能正确释放所有的资源吗?
可以, 但为啥还要用一个Handler呢? 感觉Handler在这个地方没任何用处