view生命周期总结

view生命周期

  1. view生命周期就是一个view(视图)从生成到被销毁的过程,中间有如下这几个过程,从loadstart开始,到destroy结束
    view_life_0.jpg
  2. 为验证生命周期中几种状态的发生的先后顺序,在A页面(sale.itemlist)和B页面(sale.question)的bindEvents属性以及ready中加入标记,如下:
    view_life.jpg
  3. 这是页面之间的切换,在A页面(sale.itemlist)中使用QApp.router.open方式打开B页面(sale.question)的执行结果:


    view_life_1.jpg
  4. view被router.open打开之后,从loadstart到actived之间的状态都会被触发,但是如果使用 view.show方式 打开B页面(sale.question),是从loadstart到show状态被触发,actived状态并没有被触发(在show状态之后,actived状态并没有被触发):
    Paste_Image.png
  5. 在B页面(sale.question)使用router.open方式打开C页面(sale.search),B页面(sale.question)的deactived状态并没有被触发,而之前打开B页面(sale.question)的A页面(sale.itemlist)的deactived状态被触发了:
    Paste_Image.png
  6. 可能发现上面中ready状态被触发了两次
    Paste_Image.png

    上面的是写在bindEvents里面ready里面的输出,下面的是写在与bindEvents平级的ready中的输出,说明外层的ready是在view的ready状态被触发时执行的
  7. 到页面显示出来,loadstart到actived状态都被触发过了,下面的3个状态什么时候被触发呢?当页面执行hide或者QApp.router.back方法时,会触发beforeHide和hide方法,如下是在B页面(sale.question)执行hide()方法的控制台输出:


    Paste_Image.png
  8. 那么还剩下一个destroy方法,API中说一般不需用户手动调用,如果想注销一个view可以使用View.prototype.destroy( )方法;感觉如果view不被使用了,会被自动destroy,A页面(sale.itemlist)是base页面的默认显示view:
    Paste_Image.png
  9. 当从my或order页面切换到其他tag时,my或order view就会被destroy掉:


    Paste_Image.png

    然而默认的视图A页面(sale.itemlist)切换到其他TAG时,并不会被destroy掉;

  10. 这样整个view的生命周期的各个状态就都被触发过了,实际应用过程中,要注意各个状态的顺序,比如在beforeShow阶段是获取不到show阶段执行后才有的方法或者值。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,663评论 25 708
  • 随身带上mac与源码进行学习与介绍 参考:http://www.infocool.net/kb/IOS/20160...
    桃逸阅读 456评论 0 3
  • 函数定义语句中函数被显式地"提前"到了脚本或函数地顶部。因此它们在整个脚本和函数内部都是可见的。使用var地话只有...
    lanzhiheng阅读 1,198评论 0 3
  • A修改文件F某一行并push到GIT服务器,B此时也修改了F中相同内容,现在B如果pull代码就会冲突,B使用gi...
    debt阅读 416评论 0 0
  • 猴子是活泼机灵,惹人喜爱的动物。 小猴子,是一种灵长目是动物界的种群,猴子一般大脑发达,眼眶朝向前方,眶间距窄...
    牟永莉阅读 767评论 0 0