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

相关推荐
小a杰.1 小时前
PTO ISA 指令架构 - PTO虚拟指令集架构解析
java·开发语言·架构
Java爱好狂.2 小时前
Redis高级笔记:深入浅出Java面试高频考点!
java·数据库·redis·后端·java面试·java程序员·java八股文
会编程的土豆2 小时前
Go 里 interface 为什么能比较?到底在比什么?
开发语言·后端·golang
罗超驿2 小时前
10.滑动窗口解决:无重复字符的最长子串 | LeetCode 3 Java 题解
java·算法·leetcode·面试
nnsix2 小时前
MVC、MVP、MVVM 架构 笔记
java·开发语言·前端
野生技术架构师2 小时前
2026最新Java面试1200题全解析:从基础到架构,覆盖所有技术栈(含答案)
java·面试·架构
大尚来也2 小时前
主键、外键、索引,一篇讲透
java·数据库·oracle
Smile_2542204182 小时前
vue3 + ts reactive方式清空表单对象
开发语言·前端·javascript
段ヤシ.2 小时前
回顾Java知识点,面试题汇总Day17(持续更新)
java·springboot·spring security·shiro·mybatis-plus·jdbctemplate·spring data jpa