Altbeacon BackgroundPowerSaver 属性

Altbeacon BackgroundPowerSaver property

根据找到的文档 here,BackgroundPowerSaver 应该是应用程序中的一个实例成员 class。

import org.altbeacon.beacon.powersave.BackgroundPowerSaver;

public class MyApplication extends Application {
    private BackgroundPowerSaver backgroundPowerSaver;

    public void onCreate() {
        super.onCreate();
        backgroundPowerSaver = new BackgroundPowerSaver(this);
    }
}

这当然会产生 Field can be local 警告。


我的问题是,为什么它应该是实例成员?

因为它 registers on the Application,应用程序将 BackgroundPowerSaver 添加到它的 mActivityLifecycleCallbacks ArrayList。 (请参阅应用程序源代码)

如果我没记错的话,这应该意味着应用程序保留了对 BackgroundPowerSaver 的引用,不应对其进行 GC。

所以,如果你这样做,它不应该起作用吗?

public void onCreate() {
    super.onCreate();
    new BackgroundPowerSaver(this);
}

某些东西需要保存对 BackgroundPowerSaver 实例的引用,以防止它被虚拟机垃圾回收。 如果你想删除警告,你可以简单地添加一个@SuppressWarnings 注释:

@SuppressWarnings("unused")
// Need to hold a reference to prevent garbage collection
private BackgroundPowerSaver backgroundPowerSaver 

编辑: 后台节能器曾经有不同的可配置内部实现,其中只有一个使用了 Android ActivityLifecycleCallbacks。出于这个原因,曾经有必要持有一个参考。最新版本始终使用此技术,因此不再有任何理由保留参考。

最重要的是,问题中显示的代码可以正常工作。