作者:KK
上期回顾:(点此连接跳转),上期介绍了如何将TouchGFX移植到rtthread操作系统。 本期将简单介绍一下TouchGFX的MVP架构使用方法。
演示视频:
MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部。 用一句话来概括MVP:所有数据仅能保存在称为 Model 的类对象(简单说就是一种文件)中,Presenter是视图(View)与Model之间的纽带,View只能通过Presenter来读取数据。 MVP优点:
Screen概念 在TouchGFX应用程序中,开发者可以根据项目需要创建任意数量的Screen。这里的Screen是指UI元素及其相关的业务逻辑。一个Screen通常包括两个内容:一个View,涵盖该Screen上显示的所有空间;一个Presenter,涵盖该Screen上所有的业务逻辑。 TouchGFX有自己的内存分配方案,它仅分配给最大的View和最大的Presenter,分配的RAM可以在应用程序的所有Screen上重用。 Model Model类是一个单例,始终处于活动状态,并具有两个目的:
View View类(或者更具体地说,是从TouchGFX View类派生的用户定义类)包含在当前Screen显示的所有控件。他还包含一个setScreen和一个tearDownScreen函数,当进入、退出当前Screen时,该函数会自动调用。通常,可以在setupScreen函数中设置控件。 View还包含了一个可以指向关联的Presenter的指针。该指针由框架自动设置。使用此指针,你可以将UI事件传递给Presenter。 Presenter Presenter类(也是从TouchGFX Presenter类派生的用户定义类)负责当前活动Screen的业务逻辑。它将接收来自Model的“后端”事件,以及来自View的UI事件,并决定采取哪种操作。 小结 在MVP架构中,所有数据只能保持在Model的类对象中,Presenter是View与Model之间的纽带,View只能通过Presenter来读取数据,而不能直接读取Model中的数据。
Model-View-Presenter 软件架构:
使用TouchGFXDesigner设计界面,添加toggleButton按钮
利用MVP架构填写代码:
使用TouchGFXDesigner制作cpu实用率的自定义控件,然后将这个控件添加到需要的界面
cpu的使用率算法可以直接在rtthread的github中rt-thread\examples\kernel文件下找到,具体实现原理网上有很多分析的文章,这里就不再分析了。 下边直接把CPU的使用率参数通过Model层发送给Screen。
代码开源地址:https://gitee.com/Aladdin-Wang/hellotouchGFX