首页 > 编程语言 >B4X编程语言笔记:B4X程序流

B4X编程语言笔记:B4X程序流

时间:2024-11-24 23:02:24浏览次数:7  
标签:Sub 编程语言 例程 B4X 笔记 Process Globals 模块 Starter

        学习编程必须要了解您所使用的编程工具的代码结构和运行机制。您所编写的程序编译后从哪个例程启动,启动后各例程运行的先后顺序是怎样的,这就是我们需要了解的程序流程,简称程序流。

        我们新建B4X项目时,IDE会为我们提供一个项目模板,模板包含必需的模块,各模块包含必需的例程(有的模块是空的代码块)。各例程的功能是什么,我们需要码入什么类型的代码?详见下面的总结笔记:

        B4X有四个组件(平台),各组件有各组件的IDE。由于各组件的应用方向不同,因此其程序流也有所不同。

        一、B4A程序流

        新建一个B4A项目时,我们将得到一个模板,如下图: 

        该模板包含2个模块:Main主模块和Starter服务模块。上面是Main主模块的截图,Starter服务模块的截图如下:

        模板中包含了项目运行所需的基本例程,B4A的程序流如下:

        1、Main Process_Globals
        
这是主模块的Process_Globals 例程。
        在这里声明主模块的所有私有变量和对象。
        如果没有使用Starter服务,则所有公共变量也在这里声明。

        2、Starter Sevice Process_Globals   
        
如果Starter服务存在,则会运行该服务。
        在这里声明所有的公共变量和对象,如SQL、位图等。

        3、其它 Process_Globals       
        
其它活动或模块的Process_Globals 例程,这个模块可以是您在项目中添加的 Activity、B4xPage、代码模块、自定义类模块等模块。
        在这里为给定的模块声明所有的私有变量和对象。

        4、Starter Service Service_Create      
        
如果Starter服务存在,则会运行该服务。
        在这里初始化所有的公共变量和对象,如SQL,位图等。

        5、Starter Sevice Service_Start           
        
如果Starter服务存在,则会运行该服务。
         可以把这个例程留空。

        6、Globals
        
在这里为给定的 Activity 声明所有私有变量。

        7、Sub Activity_Create
       
创建Activity活动时运行此例程。
        在这里加载布局并初始化由代码添加的活动对象。

        8、Activity_Resume
        
每次活动更改其状态时,都会运行此例程。
        在这里编写Activity状态更改时需要运行的代码。

        9、Activity_Pause
        
此例程在 Activity 暂停时运行,例如方向更改,启动另一个 Activity 等。
        在这里编写Activity 暂停时需要运行的代码。

        二、B4J程序流

        新建一个B4J项目时,我们将得到一个模板,如下图:

        这是一个B4Xpages项目。
        B4J中的程序流比B4A中的程序流要简单得多。B4J的程序流如下:

        1、Main Process_Globals
        
这是主模块的Process_Globals 例程。
        在这里声明所有的公共变量以及主模块的所有私有变量和对象。

        2、其它模块的 Process_Globals
        
其它模块的Process_Globals 例程,这个模块可以是您在项目中添加的B4xPage、代码模块、自定义类模块等模块。
        在这里为给定的模块声明所有的私有变量和对象。

        3、 Main AppStart
        这是主模块的Main AppStart 例程。
        在这里为项目指定主窗体或加载布局文件,如果是B4xPages项目,则一般在B4XMainPage页面的B4XPage_Created例程中加载布局文件。

        4、Main MainForm_Resize
        
这是主模块的MainForm_Resize 例程。
        如果要在用户调整窗体大小时调整窗体上的各节点,则必须添加 Resize 例程。
        在这里写调整窗体大小时,调整窗体上各节点控件的位置和大小的代码。
        如果在设计器中使用锚点,则在大多数情况下都不需要使用此例程。

        三、B4i程序流(翻译自B4X语言手册,无改动)

        B4i中的程序流比B4A中的程序流要简单得多。
        当我们运行一个项目时,会得到下面的模板:

Sub Process_Globals
    '这些全局变量会在应用程序启动时声明一次。 
    '可以从所有模块中访问全局变量。
    Public App As Application
    Public NavControl As NavigationController
    Private Page1 As Page
End Sub

Private Sub Application_Start (Nav As NavigationController)
    'SetDebugAutoFlushLogs(True) '如果程序在输出所有日志之前崩溃,请取消注释。
    NavControl = Nav
    Page1.Initialize("Page1")
    Page1.Title = "Page 1"
    Page1.RootPanel.Color = Colors.White
    NavControl.ShowPage(Page1)
End Sub

Private Sub Page1_Resize(Width As Int, Height As Int)

End Sub

Private Sub Application_Background

End Sub

        当您启动程序时,例程将按照上面的顺序执行。
        请注意,在Application_Start例程中,Page1的尺寸是未知的,它们只在Page1_Resize例程中的宽度和高度参数中被指定。
        如果您想调整视图,您必须在此处进行。

        四、B4R程序流(翻译自B4X语言手册,无改动)

        B4R中的程序流是直截了当的。
        当我们运行一个项目时,会得到下面的代码模板:

Sub Process_Globals
    '这些全局变量会在应用程序启动时声明一次。 
    '可以从所有模块中访问全局变量。
    Public Serial1 As Serial
End Sub

Private Sub AppStart
    Serial1.Initialize(115200)
    Log("AppStart")
End Sub

        当您运行程序时,先执行Process_Globals例程,然后再执行AppStart。

        五、备注:

        1、Process_Globals 例程和Globals例程是用来声明变量或对象的,不能编写任何其它代码。
        2、B4A中Starter服务的Process_Globals 例程是声明所有公共变量的最佳位置。 SQL对象、从文件读取的数据、多个活动使用的位图以及多模块使用的变量等都应该在此位置声明,在service_crere例程中初始化。如果项目没有使用Starter服务或非B4A项目,则声明这些变量的最佳位置是Main模块的Process_Globals 例程。
        3、在B4A中,所有视图都不能声明为公共变量。
     4、项目编译发行时,starter 服务应当从已编译的库中排除。 默认情况下,它的 #ExcludeFromLibrary 属性在服务属性区域中设置为 True。

标签:Sub,编程语言,例程,B4X,笔记,Process,Globals,模块,Starter
From: https://blog.csdn.net/yshzsl1968/article/details/144015082

相关文章

  • 简单易用开源的跨平台编程工具--B4X
            最近发现一个简单易学易用且开源的跨平台编程工具--B4X,它体积小,语言简练,类似于BASIC语言,易上手,功能强大,是个不错的可视化编程工具,非常适合新手或热衷于VB的开发者使用。        B4X有如下特点:        1、体积小,易于安装部署开发环境。  ......
  • Java学习笔记——2024.11.24
    2024.11.24一、快速入门1.小需求//Hello.javapublicclassHello{publicstaticvoidmain(String[]args){System.out.println("hello,world~");}}=>javacHello.java//如果有中文注释要保证java文件的编码正确(控制台只认gbk)=>javaHell......
  • Python学习笔记(4)Python多线程
    线程可以分为:内核线程:由操作系统内核创建和撤销。用户线程:不需要内核支持而在用户程序中实现的线程。Python3线程中常用的两个模块为:_threadthreading(推荐使用)_thread提供了低级别的、原始的线程以及一个简单的锁,它相比于threading模块的功能还是比较有限的......
  • 笔记-速通Docker
    Intro最近得学FastAPI了,为了不弄乱环境,于是决定用Docker。Docker容器安装FastAPIDocker自己想办法装(首先拉取pyhton的镜像。为什么不拉FastAPI的镜像?因为后面可能会有别的需求。dockerpullpython:alpine然后,建一个工作目录方便后续工作。先简单的写一个FastAPI的应用......
  • 【C++笔记】数据结构进阶之二叉搜索树(BSTree)
    【C++笔记】数据结构进阶之二叉搜索树(BSTree)......
  • ESP32学习笔记_Bluetooth(1)——蓝牙技术与 BLE 通信机制简介
    摘要(FromAI):这篇笔记详细讲解了蓝牙技术的分类、核心架构和通信流程,重点介绍了低功耗蓝牙(BLE)的协议栈、角色划分及连接机制,结合拓扑示例清晰阐述了蓝牙网络配置和操作过程前言:本文档是本人在《ESP32-C3物联网工程开发实战(乐鑫科技著)》进行学习时所做的学习笔记,可能存......
  • KuonjiCat的算法学习笔记:反悔贪心
    反悔贪心本蒟蒻在做题时被卡,看题解发现用反悔贪心,遂搜罗资料,得有此篇part.1什么是反悔贪心?简单的例子,我有一个只能装3个物品的背包,我要从n个价值由小到大的物品中选出3个最大的装进包里,但只能从头往后选,假如我此刻的包内物品价值为123,而我要面对的下一个物品的价值为4,那么......
  • 【论文笔记】LLaVA-o1: Let Vision Language Models Reason Step-by-Step
    ......
  • 计算机网络-做题笔记-报文交换
    笔者在完成作业时遇到了这个题目,在计算过程中发现对于存储-转发,报文交换,分组交换的知识理解不够透彻。接下来我们通过这个例题来加深一下理解首先我们明确一下什么是存储-转发简单来说就是把数据分组接受过来,存储一下,再决定从哪个链路发出去。具体来讲就是要接受完整的帧......
  • CS61B 渐进分析笔记 2
    CS61B渐进分析笔记2笔记的来源:CS61B-2024春季的课程课程主要内容:数据结构与算法分析课程运用语言:Java你可以在我的笔记网站里获得更多有用的资源。这个课有6个Homework,10个Lab,9个Project。其中第一个project是一个完整的2024游戏的实现,很有意思。此文......