1
domosekai 2020-03-20 18:07:34 +08:00
viewmodel 的存在不就是为了 activity destroy 的时候他可以活着吗?
|
2
boileryao 2020-03-20 18:36:29 +08:00
看源码就好了(逃
androidx.activity.ComponentActivity 和 androidx.fragment.app.Fragment 都实现了 LifecycleOwner 和 VIewModelStoreOwner,但是只有 Activity 注册了 ondestroy 在非 configration change 情况下调用 ViewModelStore 的 clear 方法来 clear ViewModel。 ====== 综上, 自己加回调,可以参考 ComponentActivity 的构造函数:fragment.getLifecycle().addObserver(...) 或者构造 ViewModel 的时候传 Activity |
3
insomnia1232 OP @domosekai 你真用过吗? viewmodel 在 activity 因为配置更改重建的时候会活着 正常 destroy 会 clear
|
4
insomnia1232 OP @boileryao 我觉得很可能是 bug, github 上有人提这个,然后说是 28 修复了,然后下面有人回复说 2020 年了问题还在…
|
5
insomnia1232 OP @boileryao 而且源码里这部分其实机制有点复杂,FragmentActivity 里会有一个叫 FragmentManagerViewModel 的东西, 通过 Fragment 注册的 viewmodel 会储存在这玩意里面,然后 Activity destroy 的时候这玩意会 clear 掉,但是里面储存的 viewmodel 并没有调用 onClear
|
6
john6lq 2020-03-21 01:03:51 +08:00 via iPhone
我都还没了解 viewmodel, fragment 套 fragment 就已经让我崩溃了,生命周期是真难管理。
|
7
crayygy 2020-03-21 07:49:17 +08:00 via iPhone
构造参数传 Fragment 是什么意思?有没有可能是有 leak 呢
我们项目中用的 Koin 来注入 ViewModel 的,我看到的 log 都是会在结束的时候调用到 onClear,虽然有别的问题但跟你这个应该不同。 |
8
hyyou2010 2020-03-21 10:17:54 +08:00
destroy 跟 finish 是一回事吗?是不是后者才收回 viewmodel ?
|
9
ysy950803 2020-03-22 14:42:16 +08:00
应该是 Bug,这个行为明显和绑定 Activity 的 ViewModel 不一致吧。Activity 销毁时,都是会走 onClear 的。
|