Чтобы наглядно продемонстрировать в каком порядке отрабатывают все штатные подпрограммы во время выполнения я добавил логирование в каждую из них и вот что получилось:
Таким образом выявляется что подпрограммы Globals где мы декларируем наши переменные в каждом из модулей отрабатывают первыми, затем создается и запускается сервисный модуль (если он есть в программе), затем отрабатывают локальные Global в активити программы, затем отрабатывают подпрограммы кастомной вьюшки, затем стандартный класс и только в самом конце отрабатывает создание активити. Вот таким нехитрым способом можно увидеть порядок исполнения подпрограмм всех модулей вашей программы
Для примера я создал в программе все виды модулей и в каждом из которых создал переменные двух типов Public и Private и подпрограмму Test
Модуль Activity:
Sub Process_Globals Public var1 As String Private var2 As String End Sub Sub Globals Public var3 As String Private var4 As String End Sub Sub Activity_Create Dim st As Standart st.var1 = "" var1 = var2 var3 = var4 Code.var1 = "" Dim cust As Custom cust.var1 = "" End Sub
Модуль кода:
Sub Process_Globals Public var1 As String Private var2 As String End Sub Sub Test var1 = var2 Main.var1 = "" Dim cust As Custom cust.var1 = "" End Sub
Модуль класса:
Sub Class_Globals Public var1 As String = "" Private var2 As String = "" End Sub Sub Test var1 = var2 Main.var1 = "" Code.var1 = "" Dim cust As Custom cust.var1 = "" End Sub
Модуль CustomView Class:
Sub Class_Globals Public var1 As String Private var2 As String End Sub Sub Test var1 = var2 Code.var1 = "" Main.var1 = "" Dim st As Standart st.var1 = "" End Sub
Модуль сервиса:
Sub Process_Globals Public var1 As String Private var2 As String End Sub Sub Test var1 = var2 Main.var1 = "" Code.var1 = "" Dim st As Standart st.var1 = "" Dim cust As Custom cust.var1 = "" End Sub
Таким образом видно что доступ к переменным Public есть из всех модулей (это и есть межмодульная связь), а доступ к переменным Private есть только внутри модуля. Кроме того, из модуля кода нет доступа в модуль стандартного класса. Этот недостаток реализуется следующим образом: в модуле кода создается подпрограмма с параметром типа Object для возврата нужных данных
Sub TestAsync(Callback As Object) CallSubDelayed2(Callback, "Reciever", "Hello world") End Sub
а из модуля класса обращение к подпрограмме делается так:
Code.TestAsync(Me) Wait For Reciever (RecievedData As String) Log(RecievedData)
Таким образом мы вызываем подпрограмму TestAsync и передаем ей в качестве параметра самого себя (экземпляр класса от куда и производится вызов), и ждем событие Reciever, в которое из модуля кода отправляется результат работы подпрограммы TestAsync
Практ.пример: Вбили в модуль кода подпрограмму которая производит некие математические расчеты (для примера - простая арифметика сложения). Назвали подпрограмму Podschet с входящими переменными Callback типа Object для принятия объекта возврата результата, и две переменные (а и б) типа Int (простые целые числа), которые мы будет суммировать и результат отправим в тот класс от куда нас вызвали
Модуль кода:
Sub Podschet(Callback As Object, a As Int, b As Int) CallSubDelayed2(Callback, "Reciever", a + b) End Sub
Модуль класса:
Sub Test Code.Podschet(Me, 1, 2) Wait For Reciever (Summa As Int) Log($"Сумма 1+2=${Summa}"$) End Sub
В B4A как и в Java существуют 8 примитивных (базовых) типов данных. Они служат основой для всех остальных типов данных. Они так же обладают фиксированным диапазоном значений
Базовые типы:
Byte (целые числа, размер = 1 байт). Переменные типа byte полезны при работе с потоком данных, который поступает из сети или файла. Диапазон допустимых значений: от -128 до 127. Объявление и инициализация переменных типа Byte: Dim Variable AsByte Variable = -128
Short (целые числа, размер = 2 байта). Диапазон допустимых значений: от -32768 до 32767. Объявление и инициализация переменных типа Short: Dim Variable AsShort Variable = -32768
Int (целые числа, размер = 4 байта). Тип int используется чаще при работе с целочисленными данными, нежели byte и short, даже если их диапазона хватает. Это происходит потому, что при указании значений типа byte и short в выражениях, их тип все равно автоматически повышается до int при вычислении. Диапазон допустимых значений: от -2147483648 до 2147483647. Объявление и инициализация переменных типа Int: Dim Variable AsInt Variable = -2147483648
Long (целые числа, размер = 8 байтов). Тип удобен для работы с большими целыми числами. Диапазон допустимых значений: от -9223372036854775808 до 9223372036854775807. Объявление и инициализация переменных типа Long: Dim Variable AsLong Variable = -9223372036854775808
Float (вещественные числа, размер = 4 байта). Удобен для использования, когда не требуется особой точности в дробной части числа. Диапазон допустимых значений: от ~1,4*10-45 до ~3,4*1038. Объявление и инициализация переменных типа Float: Dim Variable AsFloat Variable = -12.345
Double (вещественные числа, размер = 8 байтов). Математические функции такие как sin(), cos(), sqrt() возвращают значение double. Математические функции такие как sin(), cos(), sqrt() возвращают значение double. Диапазон допустимых значений: от ~4,9*10-324 до ~1,8*10308. Объявление и инициализация переменных типа Double: Dim Variable AsDouble Variable = 3.14159
Char (символ Unicode, размер = 2 байта). Cимвольный тип данных представляет собой один 16-битный Unicode символ. Он имеет минимальное значение 0 и максимальное значение 65535 включительно. Символы char можно задавать также при помощи соответствующих чисел. Например символ ‘Ы’ соответствует числу 1067. Объявление и инициализация переменных типа Char: Dim Variable AsChar Variable = "Ы"
Boolean (значение истина/ложь, размер = 1 байт). предназначен для хранения логических значений. Переменные этого типа могут принимать только одно из 2х возможных значений true или false. Объявление и инициализация переменных типа Boolean: Dim Variable AsBoolean Variable = True
String (значение любое текстовое). Тип String не является примитивным типом данных, однако это один из наиболее используемых типов в Java. String предназначен для хранения строк текста. Максимальная длина текстовой переменной типа String очень велика ~2^31 - 1 символов. Объявление и инициализация переменных типа String: Dim Variable AsString Variable = "Hello world"
Object (значение любое). Этот тип есть все виды и типы данных одновременно. Из него происходит все, от типов данных, до классов. В B4A это реализовано просто уникально. Объявление и инициализация переменных типа Object: Dim Variable AsObject Dim Variable2 AsString Variable = Variable2
Map (универсальное хранилище данных всех типов по принципу KeyValueStore). Некий аналог локальной базы данных. В качестве ключа и его значения принимает все типы данных. Объявление и инициализация переменных типа Map: Dim Variable AsMap Variable.Initialize Variable.Put("любимое число", 190733")