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

相关推荐
nanxun88627 分钟前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103513 小时前
Day01 | Java 基础(Java SE)
java
行者全栈架构师5 小时前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师9 小时前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_09 小时前
mac(m5)平台编译openjdk
java
唐青枫1 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马1 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261351 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261351 天前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454752 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程