小编Ler*_*ohr的帖子

当设备休眠时,Android 会减慢前台服务的速度

几天来,我一直在努力解决以下问题:我想在屏幕关闭时使用 Android 设备上的重力传感器计算运动模式。我正在使用我在前台启动的绑定服务(带有 Android 8 的通知以使其保持运行),并且在屏幕打开时一切正常。即使应用程序不在前台运行,一切正常。

然而,一旦显示器关闭,非常奇怪的事情就会开始发生:传感器数据仍在处理中,并且在一定程度上计算了移动,但结果非常糟糕且不准确。此外,如果再次打开屏幕,该应用程序的行为非常奇怪。有时应用程序按预期工作,但有时似乎旧传感器事件被延迟处理并在以后计数。从这个时候开始,整个算法就不能顺利运行了。还有什么有趣的:如果设备已插入并且我在 Android Studio 中使用控制台观察一切,一切都运行得非常完美,即使屏幕关闭也是如此。但是,如果拔掉设备,结果又会出错。

我尝试了很多事情:在主线程上运行所有内容,在另一个线程上,使用 IntentService,将 App 设置为Doze的白名单,在屏幕关闭时不向 MainActivity 发送数据,并遵循本指南(我正在开发 Galaxy J5) - 但没有任何效果。似乎 Android 系统的 SensorFusion 算法在待机状态下关闭,即使有注册的监听器,或者三星在后台运行了一些电池优化并限制了 CPU 操作。还有其他可能导致这种行为的原因吗?因此,如果应用程序处于活动状态,如果它在后台运行,但在设备处于睡眠状态时运行良好?

值得一提的是:我正在为 Cordova 开发一个插件。

这是我的代码

主类

public class SensorPlugin extends CordovaPlugin implements ServiceClass.Delegate {

    public void initialize() {
      ...
      Intent serviceIntent = new Intent(applicationContext, ServiceClass.class);
      applicationContext.bindService(serviceIntent, serviceConnection, 
          Context.BIND_AUTO_CREATE);
    }

    public void start() {
        serviceClass.startMeasuring();
    }

    @Override
    public void updateMovementCount(int count) {
        ...
    };

}
Run Code Online (Sandbox Code Playgroud)

服务类

public class ServiceClass extends Service implements …
Run Code Online (Sandbox Code Playgroud)

android android-sensors

8
推荐指数
1
解决办法
1942
查看次数

标签 统计

android ×1

android-sensors ×1