【发布时间】:2018-10-19 10:55:31
【问题描述】:
我对保留 Activity 的捆绑数据有疑问。 某些内存清理器(例如 clean master)以及某些设备的 GC 似乎会从 Activity 和相应的 ViewModel 中删除所有数据和捆绑数据,从而导致 Activity 崩溃。
我的问题是:有没有办法保存加载活动所需的数据(通常通过包传递)?
我已尝试通过 onSavedInstanceState 尝试保存数据的解决方案
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt(BUNDLE_ARGUMENT_CUSTOMER_ID, this.mViewModel.getCustomer().getId());
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState != null) {
this.mViewModel.setCustomer(new Customer(savedInstanceState.getInt(BUNDLE_ARGUMENT_CUSTOMER_ID, -1)));
}
}
除了依靠 ViewModel 来保持数据活跃之外,这些都没有奏效。 然而,目前唯一可行的解决方案是将数据保存到本地存储(使用SharedPreference 或InternalStorage),这会引发其他数据管理问题。 即使保存数据后,应用程序的效果就像在返回堆栈导航时发生了崩溃一样。
【问题讨论】:
标签: android android-activity viewmodel android-lifecycle