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

相关推荐
Niuguangshuo3 分钟前
silero-vad:超轻量级开源 VAD 实践指南
开发语言·python
金銀銅鐵15 分钟前
[Java] 一个方法最多可以有多少个入参?
java·jvm
哭哭啼31 分钟前
JAVA服务问题诊断
java·开发语言·jvm
Sayuanni%31 小时前
SpringBoot 从注解到源码:核心知识点总结
java·spring boot·后端
坚定信念,勇往无前1 小时前
Maven 私有仓库-nexus
java
Minner-Scrapy1 小时前
Scrapy 2.17 源码解析:Scheduler 调度器与磁盘/内存双队列
java·爬虫·python·scrapy·网络爬虫·twisted
晚风醉蝶2 小时前
1-11-奇偶排序-OddEvenSort
java·数据结构·算法
夏天拐跑了西瓜2 小时前
Spring Cloud 微服务实战(三):一个服务挂了,凭什么拖垮整个系统?Sentinel 限流熔断实战
java·spring cloud·微服务
CRMEB定制开发2 小时前
2026年最值得推荐的10大开源商城系统盘点
开发语言·人工智能·开源·商城系统·小程序商城
2601_967264282 小时前
Jetpack Compose 实践指南:从入门到进阶
java·学习