【发布时间】:2014-02-03 16:37:06
【问题描述】:
我正在从“父”视图模型打开一个对话框视图模型。当对话框关闭时,我希望父视图模型刷新更新的字段。
INotifyPropertyChange 不可用,因为可以关闭和重新创建 android 活动。起初我认为这不是问题:如果重新创建活动,则刷新视图。所以我尝试用父视图拥有的对象实例打开对话框。但是 mvvmcross 不会让你这样做:viewmodel 构造函数参数必须是可序列化的和简单的类型。这是有道理的,因为这些对象使用的内存可能会在 Activity 被销毁时被释放。
IMvxMessenger 似乎是要走的路。在对话框关闭之前从对话框中发布一条刷新消息。父级订阅此消息并相应地刷新属性。
但 IMvxMessenger.Publish 将发送者对象作为参数。这会导致内存泄漏吗?这会将正在关闭的视图模型保留在内存中吗?这对应用稳定性有危险吗?
【问题讨论】:
-
我的直觉是你实际上是通过某种服务来保存 - 我会从那里发送消息。
-
你能解释一下你所说的“打开一个对话框视图模型”是什么意思吗?这是一个真正的对话框(例如一个
DialogFragment)还是一个新的Activity?不幸的是,这是一个 Android 应用程序/活动生命周期很重要的领域。 -
这是一个带有对话框主题的Activity。
-
我知道对于片段来说是没有问题的。父活动不能被回收。对于消息,存储在消息中的所有对象都保留在内存中,直到消息被传递。这是正确的吗 ?它应该:) 如果是,则没有问题并且问题已得到解答。
-
否 - 在
MvxMessenger中的消息不会存储以供将来传递。如果您想实现一个缓存特定消息类型的“投递箱服务”,那么您可以自己轻松完成。