南京免费发布信息网站,投资理财培训网站建设,昆明小程序开发公司,开源网站建设工具引言
使界面控制器#xff08;activity 和 fragment#xff09;尽可能保持精简。它们不应试图获取自己的数据#xff0c;而应使用 ViewModel 执行此操作#xff0c;同时应观测 LiveData 对象以在视图中体现相应变化。设法编写数据驱动型界面#xff0c;在此类界面中…引言
使界面控制器activity 和 fragment尽可能保持精简。它们不应试图获取自己的数据而应使用 ViewModel 执行此操作同时应观测 LiveData 对象以在视图中体现相应变化。设法编写数据驱动型界面在此类界面中界面控制器负责随着数据的更改更新视图或者向 ViewModel 通知用户的操作。将数据逻辑放在 ViewModel 类中。ViewModel 应充当界面控制器与应用其余部分之间的连接器。不过要注意ViewModel 不负责提取数据例如从网络提取。但是ViewModel 应调用相应的组件来提取数据然后将结果提供给界面控制器。使用数据绑定在视图与界面控制器之间维持干净的接口。这样可以让视图更具声明性并尽量减少需要在 activity 和 fragment 中编写的更新代码。如果您更愿意使用 Java 编程语言来达成此目的请使用 Butter Knife 之类的库以避免样板代码并实现更好的抽象化。避免在 ViewModel 中引用 View 或 Activity 上下文。如果 ViewModel 存在的时间比 activity 更长在配置更改的情况下activity 将泄漏并且不会获得垃圾回收器的妥善处置。
可以根据原则进行实战啦 。
自定义LifecycleOwner
public class MyActivity extends Activity implements LifecycleOwner {private LifecycleRegistry lifecycleRegistry;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);lifecycleRegistry new LifecycleRegistry(this);lifecycleRegistry.markState(Lifecycle.State.CREATED);}Overridepublic void onStart() {super.onStart();lifecycleRegistry.markState(Lifecycle.State.STARTED);}NonNullOverridepublic Lifecycle getLifecycle() {return lifecycleRegistry;}
}