diff --git a/docs/Components.md b/docs/Components.md index 0a26f28..e66db00 100644 --- a/docs/Components.md +++ b/docs/Components.md @@ -92,7 +92,9 @@ Pan.with(getActivity(), MainViewModel.class) ## Controller -Controller的基本用法很简单,可以直接继承GeneralController,并通过泛型指定绑定的ViewModel +Controller的职责监控各类交互/生命周期事件,并决定何时调用ViewModel的render。 + +用法也很简单,可以直接继承GeneralController,并通过泛型指定绑定的ViewModel ```Java public class MainController extends GeneralController { diff --git "a/docs/\345\270\270\350\247\201\351\227\256\351\242\230.md" "b/docs/\345\270\270\350\247\201\351\227\256\351\242\230.md" index 58d4305..aaadc9d 100644 --- "a/docs/\345\270\270\350\247\201\351\227\256\351\242\230.md" +++ "b/docs/\345\270\270\350\247\201\351\227\256\351\242\230.md" @@ -2,18 +2,26 @@ ## ViewModel什么时候被销毁? -//TODO +一般来说,开发者无需关心ViewModel的生命周期。如果开发者没有额外保留引用,ViewModel会被绑定的rootView使用Tag的方式保留引用。当View被销毁时,ViewModel会被一并销毁。 -## 为什么没有监控OnCreate生命周期? +## Pan的工厂方法调用时机只能在OnCreate中嘛? -//TODO +对于直接用于Activity页面最高层级上布局ViewModel,```Pan.with...```应该选择在OnCreate中调用。当然放在OnStart/OnResume理论上也能工作,但其对OnStart/OnResume的事件监听会受影响。例如在OnResume中调用,会导致Controller无法监听到OnStart和OnResume事件。 + +对于用于Adapter内的ViewModel,由于其一般不需要监听Activity生命周期,所以不是特别要紧。 + +对用于Fragment页面上最高层级的布局ViewModel,也同样需要在onCreateView中使用,以尽可能的给Controller监听更多事件的可能。 ## 全量刷新和局部刷新? -//TODO -对于一个ViewModel是全量刷新,对于一个页面,各个部位的ViewModel局部刷新。 +ViewModel只有一个render方法,因此,对于ViewModel来说,每次Controller调用render都相当于是全量刷新。可能有人会担心全量刷新有点浪费性能,但在实际使用的过程中,一个页面往往是由多层级的多个ViewModel构成,每个ViewModel的全量刷新,实际上相当于整个页面中的局部刷新,这反而在让代码鲁棒性大大增强的同时,尽可能兼顾了性能。这样做有很多好处,例如: + +1. Controller无需关心该刷新那个局部位置,而只需要控制ViewModel的数据状态,剩下的交给render +2. 每次render将把所有的数据状态变化都显示出来,避免开发者忘记更新某个局部 +3. 对于整个页面来说,最高层的ViewModel无需关系其包含的其他ViewModel具体如何刷新,只需关心自己的刷新逻辑 ## RxJava? -//TODO \ No newline at end of file + +Pan只要求Controller去控制ViewModel的render时机,但并不关心如何做到这一点。因此,RxJava/RxAndroid是可以直接在Pan的框架内使用,且没有任何阻碍的,而且,我们团队一直以来都是在这么做。 \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 484346a..679e9b7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -35,4 +35,4 @@ pages: - 插件系统: 拓展_插件系统.md - MVVM和MVP: MVVM_MVP.md - 集成Data-Binding: 集成Data-Binding.md - - 常见问题: 常见问题.md \ No newline at end of file + - Q & A: 常见问题.md \ No newline at end of file