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

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


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 中的变量会一直占用内存直到进程结束,所以不要滥用。只有确实需要全局共享的变量才放在那里。

相关推荐
凤凰院凶涛QAQ7 小时前
《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”
java·数据结构·算法
H.莓飛7 小时前
【数据结构】排序_OJ题(一):计数、桶与排序后的处理
java·开发语言·数据结构
wangchunyu1147 小时前
JAVA AQS与Lock实现原理(含CAS)
java·开发语言·word
爱喝水的鱼丶8 小时前
SAP-ABAP:ECC→S/4HANA ABAP 迁移升级指南——程序改造、语法兼容与性能优化 导语
运维·开发语言·性能优化·sap·abap·经验交流·开发交流
w_zero_one8 小时前
算法--模拟
java·数据结构·算法
小灰灰搞电子9 小时前
Rust+Slint 实现FTP客户端调试助手源码分享
开发语言·后端·rust
外收内放9 小时前
面向对象高级(实战案例)
开发语言·python·学习
Javatutouhouduan9 小时前
阿里1658页Java面试题总结(含答案)
java·高并发·java面试·java面试题·后端开发·java程序员·java八股文
秋天的怀念_David9 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
专业程序开发源9 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计