B4A (Basic4Android) Process_Globals(应用全局)和 Globals(类中公用变量)

B4A (Basic4Android) 中,Process_GlobalsGlobals 这两个过程虽然都用于声明全局变量,但它们的作用域、生命周期和用途有本质区别。以下是详细对比:


1. Process_Globals

特性 说明
作用域 整个应用程序(所有 Activity、Service、模块共享)
生命周期 进程级别 :变量在应用进程启动时初始化,进程销毁时才释放
触发时机 应用进程启动时执行一次(所有代码模块都会执行自己的 Process_Globals
典型用途 全局配置、数据库连接、网络客户端、用户登录状态等需要跨 Activity 持久存在的变量

示例:

b4a 复制代码
Sub Process_Globals
    ' 所有 Activity 都能访问
    Public AppName As String = "MyApp"
    Public SQL1 As SQL
    Public HttpJob As HttpJob
End Sub

2. Globals

特性 说明
作用域 仅限当前 Activity 或 Service
生命周期 Activity 级别:每次 Activity 创建时初始化,Activity 销毁时变量释放
触发机制 每次 Activity 的 Create 事件执行前自动调用
典型用途 当前界面的控件引用、界面状态变量、临时数据

示例:

b4a 复制代码
Sub Globals
    ' 这些变量每次 Activity 创建时重新初始化
    Dim EditText1 As EditText
    Dim Button1 As Button
    Private CurrentScore As Int = 0
    Private IsFirstLoad As Boolean = True
End Sub

3. 关键区别对比表

对比维度 Process_Globals Globals
初始化时机 应用进程启动时 每次 Activity 创建时
销毁时机 进程终止时 Activity 销毁时
跨 Activity 共享 ? 是(所有 Activity 可见) ? 否(仅当前 Activity)
常用变量类型 长期对象(SQL、HttpJob、File) UI 控件、界面状态变量
内存释放 进程结束前常驻内存 Activity 销毁后即可回收
典型声明位置 Process_Globals 子程序内 Globals 子程序内
访问修饰限制 无特殊限制(通常用 Public) 当前模块内部(常用 Private)

4. 实际开发中的注意事项

b4a 复制代码
' ? 正确用法:跨 Activity 共享的变量放在 Process_Globals
Sub Process_Globals
    Public CurrentUser As User
    Public DB As DatabaseManager
End Sub

' ? 正确用法:当前界面的控件放在 Globals
Sub Globals
    Private lblTitle As Label
    Private btnSubmit As Button
    Private CurrentItemIndex As Int
End Sub

' ? 错误用法:将 UI 控件或 Activity 相关变量放在 Process_Globals
' (会导致 Activity 销毁后控件引用仍然存在,可能引发内存泄漏)

5. 总结

  • Process_Globals = 应用全局变量(进程级,跨所有模块)
  • Globals = 当前模块变量(Activity 级别,仅当前界面)

选择原则:

  • 需要跨多个 Activity/Service 共享的状态 → Process_Globals
  • 仅当前界面需要的临时变量、UI 控件引用 → Globals

?? 一个重要提示Process_Globals 中的变量会一直占用内存直到进程结束,所以不要滥用。只有确实需要全局共享的变量才放在那里。

相关推荐
折哥的程序人生 · 物流技术专研6 小时前
第4篇:Lambda 简化策略模式(Java 8+)
java·设计模式·策略模式·函数式编程·lambda·代码简化·扩充系列
researcher-Jiang7 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
西门吹-禅8 小时前
java springboot N+1问题
java·开发语言·spring boot
DLYSB_8 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
skywalk81639 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
weixin_BYSJ19879 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
AI小码9 小时前
LLM 应用的缓存工程:当每次 API 调用都在燃烧成本
java·人工智能·spring·计算机·llm·编程·api
Hui Baby10 小时前
Spring Security
java·后端·spring
IT笔记10 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
2zcode10 小时前
免费开源项目文档:基于MATLAB卷积神经网络的口罩佩戴检测系统
开发语言·matlab·cnn