AndroidViewModel vs ViewModel
随着Android Architecture Components库的引入,引入了几个新类,包括
Application context aware
ViewModel
我很简洁,但是这意味着什么呢? 我们什么时候应该选择在
如果需要在视图模型中使用上下文,则应使用AndroidViewModel,因为它包含应用程序上下文(以检索上下文调用getApplication()),否则请使用常规ViewModel。
编辑
AndroidViewModel具有应用程序上下文。
我们都知道拥有静态上下文实例是邪恶的!(可能导致内存泄漏!)
但是,拥有静态应用程序实例并不像您想象的那样糟糕
因为,我们正在运行的应用程序中只有一个Application实例。
因此,在特定的类中使用并拥有Application实例通常不是问题。
但是,如果应用程序实例引用了它们,则由于引用周期问题而成为问题。
另请参阅有关应用程序实例
终于,我得到了一些更简单的解释,……
... AndroidViewModel类是ViewModel的子类,与之相似,它们旨在存储和管理与UI相关的数据,这些数据负责为UI准备和提供数据,并自动允许数据在配置更改后幸免。
AndroidViewModel的唯一区别是它与应用程序上下文一起提供,如果您需要上下文来获取系统服务或有类似要求,这将很有帮助。粗体字使感觉更清晰。
AndroidViewModel是ViewModel的子类。它们之间的区别是我们可以传递应用程序上下文,该上下文可以在需要应用程序上下文时使用,例如在存储库中实例化数据库。
AndroidViewModel is a Application context aware ViewModel.
AndroidViewModel:
1 2 3 4 5 6 7 8 | public class PriceViewModel extends AndroidViewModel { private PriceRepository priceRepository; public PriceViewModel(@NonNull Application application) { super(application); priceRepository= new PriceRepository(application); allPrices = priceRepository.getAllPrices(); } |
ViewModel:
1 2 3 4 | public class PriceViewModel extends ViewModel { public PriceViewModel() { super(); } |
You Should use AndroidViewModel only when you require Application
Context.
您绝不应该在ViewModel中存储活动的引用或引用活动的视图,因为ViewModel的设计目的是使活动失效,并且会导致内存泄漏。