ViewModels是独立于activity/片段生命周期还是仅仅独立于其配置更改。它们何时将不再存在,随后的onCleared()方法将被调用。viewModel可以与另一个activity共享吗?
一种情况:
Activity1+viewModel1--->(rotation)--->Activity1+viewModel1
--->(launch Intent)--->Activity2+viewModel1
这种分享是否可能,是否是一种好的做法。
此外,由于应用程序生命周期回调,onpause->onstop->ondestroy对这两个程序都是相同的
1.activity旋转和
2.activity结束时,
ViewModel如何在内部确定调用onCleared的正确时间并最终结束其生命周期。
调查结果:
ViewModel在内部使用holderFragment来保存activity的实例,并使用setRetainInstance方法(如碎片)来说明配置更改。
来源:dive-inside-of-androids-viewmodel-architecture-components
检查fragment.java
中的onDestroy()
方法
public void onDestroy() {
this.mCalled = true;
FragmentActivity activity = this.getActivity();
boolean isChangingConfigurations = activity != null && activity.isChangingConfigurations();
if (this.mViewModelStore != null && !isChangingConfigurations) {
this.mViewModelStore.clear();
}
}
变量isChangingConfigurations为true当activity旋转时,viewModelStore方法clear()不会被调用。
当activity被销毁时,isChangingConfigurations为false,viewModelStore将被清除。
ViewModels是独立于activity/片段生命周期还是仅仅独立于其配置更改。
视图模型(ViewModels,VMs)与配置更改无关,并且在activity/片段被销毁时被清除。
以下是来自官方站点的ViewModel的生命周期:
viewModel可以与另一个activity共享吗?
你不应该对活动那样做。但是,片段可以共享viewmodel
使用它们的activity作用域来处理它们之间的通信
ViewModel如何在内部确定调用oncleared
并最终结束其生命周期的正确时间?
当应用程序被放入后台并且应用程序进程被终止以释放系统内存时,将调用VM的oncleared
。
查看ViewModels是否持久化我的数据?这篇Android开发人员文章中的ViewModels:Persistence、onSaveInstanceState()、Restoring UI State和Loader
如果您希望用户能够将应用程序放到后台,然后在三个小时后返回到完全相同的状态,那么您还应该持久化数据。这是因为一旦你的activity进入后台,如果设备内存不足,你的应用程序进程就可以停止。
如果停止应用程序进程和activity,那么ViewModel也将被清除。
问题内容: 什么时候 叫?我有一个活动,需要在调用onMeasure之后执行一项操作。 我的问题与此处未回答的问题相同。在查看文档指出onMeasure当被称为requestLayout()被调用时,它显然是对自身视图调用时它认为是不能再目前的范围内配合。 但是,这不能告诉我何时我的活动可以假设我的视图已被测量。我已使用此代码将ImageView扩展为TouchImageView。建议在这里使用o
在什么情况下会调用applicationWillTerminate?例如,如果代码中出现崩溃,是否会调用它? 苹果的doc对此语焉不详,它只说当系统出于某种原因需要终止它的时候。 对于不支持后台执行或针对iOS3.x或更早版本链接的应用程序,当用户退出应用程序时,总是调用此方法。对于支持后台执行的app,用户退出app时一般不会调用此方法,因为在那种情况下app只是移动到后台。但在app在后台运行
Q1。我的理解是。但是超时场景呢? Q2。在哪里检查完整未来的默认超时设置?如何更改它?未来超时后会发生什么?(完成还是异常?) Q3。只要未来“完成”(完成或超时或任何最后阶段),我就需要。是否有保证在未来“完成”后调用的方法?我应该把放在哪里? 从新到完整的未来。更喜欢用Java8回答。谢谢你的帮助。
我的问题可以是如何使用RXJava2的CompositeDisposable的重复?但要求再澄清一个疑点。根据接受的答案 在我的例子中,我使用片段作为我的视图(MVP中的视图层),在某些情况下,我将活动片段添加到backstack,这实际上不会杀死片段,而只是杀死它的视图。这意味着只调用而不调用。稍后,我可以回到后面堆栈中的相同片段,所以只有它的视图被重新创建。我有一个作为我的的成员,它保存订阅。
问题内容: 现在,我使用一个静态布尔值来告诉初始化何时发生。有没有更简单的方法知道我已经调用了initialize? 谢谢!!! 解决了!!!!非常感谢您的评论。您需要在扩展应用程序的类中初始化解析,然后将其作为应用程序(而不是其他活动)添加到清单文件中。 :) 这是我使用Parse的课程: 这是我的android清单文件 问题答案: 创建一个应用程序类,然后在onCreate中初始化解析。 在此
问题内容: 当消化周期正在发生的事情,我很困惑,是基于每50ms定时器它定期调用(因为它说,在这里,并暗示在这里,或者它的每一个进入的角度范围内(因为它说,事件发生后呼吁在这里,在这里还有这里? 重要的示例: 在我的模型中,我有一个名为3的变量。在我的HTML中,我有。触发按钮单击之类的事件并在控制器中引发一个处理程序,该处理程序内的代码为: 假设UI线程未被阻止,则单击按钮后用户将看到什么?他只