gpt4 book ai didi

android - MvvmCross ViewModel 生命周期

转载 作者:搜寻专家 更新时间:2023-11-01 08:44:55 24 4
gpt4 key购买 nike

根据我能查到的资料,MvvmCross Viewmodel的生命周期是

构建——使用IoC进行依赖注入(inject)

Init() - 导航参数的初始化

ReloadState() - 墓碑后补水

Start() - 在初始化和再水化完成时调用

我的实现如下:

public async Task Init(Guid ID)
{
await MPS_Mobile_Driver.Droid.DataModel.ShipmentDataSource.GetShipmentInventory(ID);
ShipmentInventory = ShipmentDataSource.CurrInventory;

ShipmentLots = await MPS_Mobile_Driver.Droid.DataModel.ShipmentDataSource.GetShipmentLotList((int)ShipmentInventory.idno, (short)ShipmentInventory.idsub);

Inv_DamageList = await ListDataSource.GetInv_Damage();
}
protected override void SaveStateToBundle(IMvxBundle bundle)
{
base.SaveStateToBundle(bundle);
bundle.Data["ShipmentInventory"] = StringSerializer.SerializeObject(ShipmentInventory);
bundle.Data["ShipmentLots"] = StringSerializer.SerializeObject(ShipmentLots);
bundle.Data["Inv_DamageList"] = StringSerializer.SerializeObject(Inv_DamageList);
}

protected override void ReloadFromBundle(IMvxBundle state)
{
base.ReloadFromBundle(state);
ShipmentInventory = StringSerializer.DeserializeObject<ShipmentInventory>(state.Data["ShipmentInventory"]);
ShipmentLots = StringSerializer.DeserializeObject<ShipmentLotList>(state.Data["ShipmentLots"]);
Inv_DamageList = StringSerializer.DeserializeObject<Inv_DamageList>(state.Data["Inv_DamageList"]);
state.Data.Clear();
}

首先,我似乎无法让模拟器在我按下 Home 键时实际销毁 Activity,即使我选中了该选项。无论如何,该 Activity 似乎一直在后台运行。

话虽这么说,当我按下主页键时,它会调用 SaveStateToBundle。它似乎永远不会调用 ReloadFromBundle。这使得很难测试实际发生了什么。我担心的是,根据生命周期,如果应用程序确实从墓碑中恢复,它会在调用 ReloadFromBundle 之前调用 Init。由于 Init 是将参数传递给 ViewModel 的首选方式,因此只有使用参数来初始化数据才有意义。如果发生这种情况后,它调用ReloadFromBundle,它会覆盖Init中初始化的数据。这很好但效率很低。有没有办法在 Init 中知道 ViewModel 是由于新导航而创建的,还是正在从墓碑中恢复?

感谢您对此的任何帮助。

吉姆

最佳答案

我对 ReloadFromBundle(IMvxBundle state) 有同样的问题,它从未被调用过。只有“SaveState”模式似乎有效。

不过我可以回答你的第二个问题:

你不应该使用 Init 来加载你的数据。您应该只使用它来传递要检索的数据的 ID。 “加载”阶段应该发生在 Start 方法中。

关于android - MvvmCross ViewModel 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29372480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com