Best practices for calling Java/Kotlin code
Learn about the best practices for calling Java/Kotlin code from C# scripts.
Read time 2 minutesLast updated 7 days ago
Learn about the best practices for calling Java and Kotlin plug-in code from C# scripts to improve performance of your application.
Minimize JNI calls
Using the Java Native Interface (JNI), through either the high-level or low-level C# API is resource intensive and can be slow. To improve performance, and also code clarity, it's best practice to keep the number of JNI calls low.
To avoid unnecessary JNI calls, the high-level C# API caches the ID of each Java method that you call. This means that subsequent calls to the same method aren't as resource intensive as the first call. The calls don't need to be during the same frame or even from the same / instance. If you use the low-level API and want this performance benefit, you must manually cache method ID. Otherwise, it's best practice to use the high-level API.
AndroidJavaObjectAndroidJavaClassManage garbage collection
It's best practice to wrap any instance of or with a statement to ensure Unity destroys them as soon as possible. If you don't use , Unity's garbage collector will still release all created instances, but you lose control over when this happens.
AndroidJavaObjectAndroidJavaClassusingusingThe following code example demonstrates how to use statements to access the system language in an optimal way:
usingusing 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")); } } }}