Performance 在应用程序生命周期中将值存储在内存中的替代方法
我有一个从用户那里获取位置信息的应用程序,它需要消耗电池,频繁请求位置是完全不可取的,因为除非用户手动刷新,否则该应用程序只需要1次 所以问题是,我注意到,有时即使我将其存储在onSave中并在onCreate中还原,该值也是空的,所以垃圾收集器正在执行它的作业,应用程序使用位图分配,方向也可能发生变化,所以我认为这并不奇怪,现在我正在考虑对应用程序进行子类化,以保持对位置变量的全局引用,但有几个人反对这种做法,主要是反对静态变量,所以我想知道是否有其他选择。在SharedReferences中存储值对我来说似乎不是一个好的/干净的/快速的选项,更不用说磁盘了,因为如果应用程序被破坏,位置就不重要了,它只在应用程序运行并且避免垃圾收集器时起作用 谢谢 保存价值Performance 在应用程序生命周期中将值存储在内存中的替代方法,performance,android-activity,android,Performance,Android Activity,Android,我有一个从用户那里获取位置信息的应用程序,它需要消耗电池,频繁请求位置是完全不可取的,因为除非用户手动刷新,否则该应用程序只需要1次 所以问题是,我注意到,有时即使我将其存储在onSave中并在onCreate中还原,该值也是空的,所以垃圾收集器正在执行它的作业,应用程序使用位图分配,方向也可能发生变化,所以我认为这并不奇怪,现在我正在考虑对应用程序进行子类化,以保持对位置变量的全局引用,但有几个人反对这种做法,主要是反对静态变量,所以我想知道是否有其他选择。在SharedReferences中
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable("mCurrentLocation", mCurrentLocation);
...
}
恢复值:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mCurrentLocation = savedInstanceState.getParcelable("mCurrentLocation");
...
}
...
错误:
Location location = ((mainActivity) mActivity).location;
userLongitude = String.valueOf(location.getLongitude()); //null sometimes!, not always
您在onSaveInstanceState和onRestoreInstanceState中出错。应该可以很容易地在其中存储和检索位置数据。毕竟,它只有几个字节。您要么没有正确地将其插入捆绑包,要么没有正确地将其再次取出
你当然不需要把它放在SharedReference中,除非你想让它在两次应用调用之间存活下来。对于位置数据,这几乎肯定不是您想要的。添加了我的保存和恢复方法以及发生的错误sometimes@Motheus您是否尝试在SaveInstanceState中签入您要放入的位置始终为非空?以及检查还原的mCurrentLocation是否为null?在接收到位置后,它不应为null,因为这是某些函数的要求,并且在获取后不会再次修改。这是需要运行的,因此此时不可能从代码中获取空位置或从未检索到。这就是为什么我猜测垃圾收集器在onSave之前/之后使用它,这样代码段有时就不会到达它