【问题标题】:Battery issues with background scans背景扫描的电池问题
【发布时间】:2017-07-14 05:38:25
【问题描述】:

我正在使用 altbeacon 的 Android Beacon 库进行后台邻近扫描,以便在应用处于后台时,当用户进入我的 1 个信标范围时向用户显示通知。我通过将其添加到我的应用程序文件的 onCreate 方法中使其工作:

region = new Region("com.myapplication.identifier", 
                    Identifier.parse(Constants.beaconUUID), null, null); 
regionBootstrap = new RegionBootstrap(this, region);
beaconManager.setBackgroundScanPeriod(1000l);
beaconManager.setBackgroundBetweenScanPeriod(30000l);

我在didEnterRegion 方法中有代码来确定该信标的范围并显示该位置的通知。我发现 30 秒是通过信标范围时仍能收到通知的最低可接受频率。自从我添加此代码以来,我注意到即使我不在任何信标附近,它也会导致 android 7.0 报告“每小时电池使用量在 1% 到 2% 之间”的电池问题。我已经在不同的扫描频率上进行了很多迭代,并将问题隔离为完全独立于didEnterRegion 中的实际内容,此时我正在拉扯我的头发。任何人都知道减少电池消耗并仍然触发didEnterRegion 的方法吗?

【问题讨论】:

    标签: android altbeacon


    【解决方案1】:

    你提到的每 30 秒扫描 1 秒的占空比会消耗大量电池:

    beaconManager.setBackgroundScanPeriod(1000l);
    beaconManager.setBackgroundBetweenScanPeriod(30000l);
    

    库默认是在后台每 5 分钟(30000 秒)扫描 10 秒。虽然两者都代表相同的 1/30 占空比,但开始和停止扫描 10 倍通常会消耗更多的能量。 如果可以的话,我会将扫描设置恢复为默认设置,甚至延长后台扫描时间以节省更多电量。

    了解在 Android 5+ 上,如果周围没有信标,应用程序将继续执行过滤的低功耗扫描,即使在扫描期间也是如此。因此,如果在 5 秒内检测到信标,您仍然会收到回调。

    在后台进行定期全功率扫描的唯一原因是 (a) 对于 Android 4.x 设备 (b) 对于没有支持低功率过滤扫描的蓝牙芯片的设备或所有硬件过滤器的设备正在使用中,以及 (c) 已知信标存在的情况,因此过滤的背景扫描无法继续。

    另外,@sunnySydeUp 在他的回答中提出的观点是正确的。 如果您还没有使用 BackgroundPowerSaver,您确实需要使用它,因为这会在前台和后台扫描周期之间自动切换您的应用程序。如果您不使用它,您将一直以前台速率进行扫描。

    【讨论】:

    • 所以如果我执行以下操作:beaconManager.setBackgroundScanPeriod(1000l); beaconManager.setBackgroundBetweenScanPeriod(30000l); backgroundPowerSaver = new BackgroundPowerSaver(this); 当应用程序在后台运行时,我仍然会在通过范围时收到通知?
    • 正确。但是再次使用该扫描周期,您可能会比使用默认设置更快地耗尽电池电量。
    【解决方案2】:

    您可以通过在您的Application 中保留BackgroundPowerSaver 的实例来节省一些电量。

    import org.altbeacon.beacon.powersave.BackgroundPowerSaver;
    
    public class MyApplication extends Application {
        private BackgroundPowerSaver backgroundPowerSaver;
    
        public void onCreate() {
            super.onCreate();
            backgroundPowerSaver = new BackgroundPowerSaver(this);
        }
    }
    

    来源: Altbeacon Battery Manager

    【讨论】:

    • 不幸的是,这将扫描速度从我需要的 30 秒降低到 5 分钟。此功能似乎适用于主要在应用程序处于前台时进行扫描的应用程序,而我实际上是在应用程序处于前台时停止扫描并且仅在后台进行扫描。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    相关资源
    最近更新 更多