Bellek Danışmanlığı API'sini kullanmaya başlama

Bu kılavuzda, Android Studio kullanarak Memory Advice API'nin Jetpack sürümünü uygulamanıza nasıl entegre edeceğiniz açıklanmaktadır.

Oyunlar, derleme ortamları için önerilen Memory Advice API sürümünü kullanmalıdır. Android Studio için Jetpack sürümünü öneririz. Android Oyun Geliştirme Uzantısı (AGDE) gibi diğer derleme ortamlarının sürümleri hakkında bilgi edinmek için Dağıtımlar'a bakın.

Kitaplığı ekleme

Bu bölümde, kitaplığı Android Studio (Android Graadle Eklentisi) projenize nasıl ekleyeceğiniz açıklanmaktadır.

Bağımlılıkları ekleyin

Kitaplığı Android Studio projenize eklemek için aşağıdaki adımları tamamlayın:

  1. Android Jetpack kitaplığını gradle.properties proje düzeyinde etkinleştirin. Dosya, normalde projenizin kök dizininde bulunur:

      android.useAndroidX=true
    
  2. Modül düzeyindeki build.gradle dosyasını açın ve bağımlılık bloğuna aşağıdaki implementation öğesini ekleyin. Bu, uygulamanızdaki bellek önerileri API'si bağımlılıklarını tanımlar.

     dependencies {
         implementation 'androidx.games:games-memory-advice:1.0.0-beta01'
     }
    
  3. android bloğundaki NDK sürümünü belirtin:

     ndkVersion "23.1.7779620"
    

    Memory Advice API ile uyumlu bir NDK sürümü seçtiğinizden emin olun. Desteklenen NDK sürümlerinin listesini Android Games Jetpack Sürüm sayfasında bulabilirsiniz.

  4. CMake için ek derleme bayrakları bildirin. Bunun için android bloğunun içindeki defaultConfig bloğuna aşağıdaki kodu ekleyin:

     externalNativeBuild {
         cmake {
             cppFlags '-std=c++14'
             // c++_shared flavor is the only supported STL type.
             arguments "-DANDROID_STL=c++_shared"
         }
     }
    
  5. Prefab özelliğini etkinleştirin. Android Gradle Plugin(AGP) 4.1 veya sonraki sürümleri için android bloğuna aşağıdaki kodu ekleyin:

     buildFeatures {
        prefab true
     }
    

    AGP 4.0 veya daha eski bir sürümü kullanıyorsanız yapılandırma talimatları için Prefab sayfasına bakın.

  6. Dosyayı kaydedin. Aşağıdaki mesajı görürseniz projenizi güncellemek için Şimdi Senkronize Et düğmesini tıklayın:

      Gradle files have changed since last project sync. A project sync may be
      necessary for the IDE to work properly.
    

C/C++ derlemesi için CMake'i yapılandırma

Projenize Memory Advice API için başlık dosyalarını ve çalışma zamanı kitaplığını eklemek üzere projenizin ana CMakeLists.txt dosyasını açın. Proje bölmesinde, dosya app > src > main > cpp konumundadır. Dosyayı açtıktan sonra aşağıdaki adımları uygulayın:

  1. Dosyanın üst kısmına yakın bir yerde, tüm cmake_minimum_required ve project satırlarından sonra aşağıdaki satırı ekleyin:

     find_package(games-memory-advice REQUIRED CONFIG)
    
  2. target_link_libraries komutuna, games-memory-advice::memory_advice komutunu ekleyin. Bu, Memory Advice API'yi projenizin yerel kitaplığına bir bağımlılık yapar ve son uygulama paketinize dahil eder. Güncelleme, aşağıdakine benzer olacaktır:

     target_link_libraries(
         your-native-lib
    
         #link memory advice to the project
         games-memory-advice::memory_advice
    
         #rest of the dependencies
         #...
     )
    

Java dosyalarını yapılandırma

Memory Advice API'ye dahil olan yerel kitaplık libmemory_advice.so şeklindedir. Bu, uygulamanızın kendi C/C++ paylaşılan kitaplığı için bir derleme bağımlılığıdır ve System.loadlibrary() işleviyle uygulamanız kendi paylaşılan kitaplığını yüklediğinde otomatik olarak yüklenir.

Bu adım isteğe bağlıdır.

  1. Projenizde yerel kitaplıkları yükleyen Java kodunu bulun. Böyle bir dosya yoksa ekleyin. Kod, System.loadLibrary("your-native-lib") özelliğine benzer ve static bloğunda yer alır.

  2. System.loadLibrary("your-native-lib") bölümüne System.loadLibrary("memory_advice") ekleyin. Güncelleme, aşağıdakine benzer olacaktır:

     static {
         System.loadLibrary("your-native-lib");
         // Note: loading libmemory_advice.so is optional.
         System.loadLibrary("memory_advice");
     }
    

Kitaplığı kullanma

Bu bölümde, kitaplığın nasıl kullanılacağı açıklanmaktadır.

Başlık dosyalarını ekleyin

Aşağıdaki kitaplık başlık dosyasını projenize ekleyin:

    #include <memory_advice/memory_advice.h>

Kitaplığı başlatma

Uygulama başladığında kitaplığı ilk kullanıma hazırlamanız gerekir. Bunun için şu kodu projenize ekleyin:

    MemoryAdvice_init(env, activity);

env ve activity parametreleri, yerel kitaplığınızda kullanılması gereken JNIEnv* ve jobject değişkenleridir. Yerel kitaplığınıza yapılan her JNI çağrısı bu değişkenleri içermelidir. GameActivity kitaplığını kullanıyorsanız MemoryAdvice_init işlevini çağırmadan önce çağrıyı JavaVM'ye eklediğinizden emin olun.

Bellek durumu anketi

Kitaplığı seçtiğiniz aralıkta yoklayarak uygulamanızın bellek durumunu öğrenebilirsiniz. Kitaplığı yoklamanız gerektiğinde MemoryAdvice_getMemoryState işlevini kullanın:

    MemoryAdvice_MemoryState state = MemoryAdvice_getMemoryState();
    switch (state) {
      case MEMORYADVICE_STATE_OK:
        // The application can safely allocate significant memory.
        break;
      case MEMORYADVICE_STATE_APPROACHING_LIMIT:
        //The application should minimize memory allocation.
        break;
      case MEMORYADVICE_STATE_CRITICAL:
        // The application should free memory as soon as possible,
        // until the memory state changes.
        break;
    }

İzleyici ayarlama

Ayrıca izleyici ayarlayıp Memory Advice API'ye kaydedebilirsiniz. Durum sınıra veya kritik bellek durumuna yaklaştığında (ancak ok durumunda değil) izleyici işleviniz çağrılır. Örneğin, aşağıdaki kod bir izleyici oluşturur ve 2 saniyede bir Memory Advice API bildirimi ister:

    static int USER_DATA;
    constexpr int callback_waittime_ms = 2000;

    void callback(MemoryAdvice_MemoryState state, void* context) {
        switch (state) {
          case MEMORYADVICE_STATE_APPROACHING_LIMIT:
            //The application should minimize memory allocation.
            break;
          case MEMORYADVICE_STATE_CRITICAL:
            // The application should free memory as soon as possible,
            // until the memory state changes.
            break;
        }
    }

    MemoryAdvice_registerWatcher(callback_waittime_ms, callback, &USER_DATA);

Sırada ne var?

Ek kaynaklar ve raporlama sorunları için genel bakış bölümüne göz atın.