OnSensorchanged在睡眠后不工作约5分钟,直到打开应用程序



我面临着一些奇怪的问题。我有一个接收传感器更新的服务。一切正常,直到屏幕关闭一段时间。之后,直到我从启动器打开该应用程序之前,才可以调用OnSensorchanged。

这是我的服务类:

public class MyService extends Service implements OrientationMonitor.Listener, ScreenReceiver.ScreenStateListener {
    private final OrientationMonitor orientationMonitor = new OrientationMonitor(this);
    private final ScreenReceiver screenReceiver = new ScreenReceiver(this);
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        orientationMonitor.start();
        screenReceiver.register();
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        orientationMonitor.stop();
        screenReceiver.unregister();
    }
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void screenStateChanged(boolean isScreenOn) {
        if (isScreenOn) {
            orientationMonitor.start();
        } else {
            orientationMonitor.stop();
        }
    }
}

这是entientationMonitor的代码:

public class OrientationMonitor implements SensorEventListener {
    private final Listener listener;
    private final WindowManager windowManager;
    private final SensorManager sensorManager;
    private final Sensor rotationSensor;
    public OrientationMonitor(@NonNull Listener listener) {
        this.listener = listener;
        windowManager = (WindowManager) AppContext.get().getSystemService(Context.WINDOW_SERVICE);
        sensorManager = (SensorManager) AppContext.get().getSystemService(Context.SENSOR_SERVICE);
        rotationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
    }
    public void start() {
        if (rotationSensor != null)
            sensorManager.registerListener(this, rotationSensor, 10_000);
    }

    public void stop() {
        if (rotationSensor != null)
            sensorManager.unregisterListener(this, rotationSensor);
    }
    @Override
    public void onSensorChanged(SensorEvent event) {
        //Here some work is performed
    }
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
    public interface Listener {
        void onOrientationChanged(int angle);
    }
}

在工作期间,当应用程序最小化并关闭屏幕时,服务会收到通知并停止(Unregister)旋转传感器。当屏幕打开时,它再次注册它。如果我将屏幕关闭一段时间(不超过1-2分钟),那么一切都很好,正常onsensorchanged Fire。

但是,当我将屏幕转5分钟或更长时间时,OnSensorchanged直到我打开应用程序之前不会开火,然后立即发射没有任何呼叫。但是,在调试过程中,我看到 sensormanager.registerListener(this,rotationSensor,10_000); 在屏幕打开时被调用。

我发现有关OnSensorchanged在睡眠期间不工作的许多问题,但有点不同。

已经尝试了零件唤醒锁并从另一个线程中注册侦听器,但没有帮助。

有人有类似的情况吗?期待您的建议,并提前感谢您。

我没有找到这个问题的原因,而是找到了解决方案。正如我说的

当我打开5分钟或更多的屏幕时,OnSensorchanged直到打开应用程序才会发射,然后立即发射没有任何呼叫

因此,我创建了一个没有UI的空活动,然后在唤醒后立即称其为" on Create"。这样,我就可以使OnSensorchanged开始在我的服务中工作。

最新更新