Рекомендуемые методы вызова кода Java/Kotlin
Узнайте о рекомендациях по вызову кода плагинов Java и Kotlin из скриптов C# для повышения производительности приложения.
Минимизировать JNI вызовы
Использование Native Java Interface (JNI), через высокоуровневый или низкоуровневый C# API ресурсоемко и может быть медленным. Для повышения производительности, а также ясности кода, лучшим решением является сохранение низкого числа вызовов JNI.
Чтобы избежать ненужных вызовов JNI, высокоуровневый C# API кэширует ID каждого вызванного вами метода Java. Это означает, что последующие вызовы одного и того же метода не являются столь ресурсоемкими, как первый вызов. Вызовы не должны происходить в одном и том же кадре или даже из одного и того же экземпляра AndroidJavaObject/AndroidJavaClass. Если вы используете низкоуровневый API и хотите получить это преимущество производительности, вы должны вручную кэшировать метод ID.. В противном случае лучше использовать высокоуровневый API.
Примечание: Unity поддерживает кэш до тех пор, пока приложение не закрывает. Это включает время, когда приложение находится в фоновом режиме.
Управление сбором мусора
Наилучшей практикой является обвязка любого экземпляра AndroidJavaObject или AndroidJavaClass заявлением using, чтобы гарантировать, что Unity уничтожит их как можно скорее. Если вы не используете using, сборщик мусора Unity все равно освободит все созданные экземпляры, но вы потеряете контроль над тем, когда это произойдет.
Следующий пример кода демонстрирует, как использовать команды using для оптимального доступа к системному языку:
using UnityEngine;
public class LocaleExample : MonoBehaviour
{
void Start()
{
using (AndroidJavaClass cls = new AndroidJavaClass("java.util.Locale"))
using (AndroidJavaObject locale = cls.CallStatic<AndroidJavaObject>("getDefault"))
{
if (locale != null)
{
Debug.Log("current lang = " + locale.Call<string>("getDisplayLanguage"));
}
}
}
}