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

Bu kılavuzda, Android Studio'yu 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 Game Development Extension (AGDE) gibi diğer derleme ortamlarına yönelik sürümler hakkında bilgi edinmek için Dağıtımlar bölümüne bakın.

Kitaplığı ekleme

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

Bağımlılıkları ekleme

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

  1. Android Jetpack kitaplığını proje düzeyinde etkinleştirin gradle.properties. Bu dosya genellikle projenizin kök dizininde bulunur:

      android.useAndroidX=true
    
  2. Modül düzeyindeki build.gradle dosyasını açın ve bağımlılıklar bloğuna aşağıdakileri ekleyin: implementation Bu, uygulamanızdaki bellek tavsiyesi API'si bağımlılıklarını bildirir.

     dependencies {
         implementation 'androidx.games:games-memory-advice:1.0.0-beta01'
     }
    
  3. android bloğunda 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 Release sayfasında bulabilirsiniz.

  4. CMake için ek derleme işaretleri bildirin. Bunu yapmak 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. Prefabrik özelliğini etkinleştirin. Android Gradle eklentisi(AGP) 4.1 veya sonraki sürümler için aşağıdaki kodu android bloğuna 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ını inceleyin.

  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

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

  1. Dosyanın üst kısmına yakın bir yerde, herhangi bir cmake_minimum_required ve project satırı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 değerini ekleyin. Bu işlem, Memory Advice API'yi projenizin yerel kitaplığına bağımlı hale getirir ve son uygulama paketinize dahil eder. Güncelleme aşağıdaki gibi görünmelidir:

     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 ile birlikte gelen yerel kitaplık libmemory_advice.so'dır. Uygulamanızın kendi C/C++ paylaşılan kitaplığı için derleme bağımlılığıdır ve uygulamanız kendi paylaşılan kitaplığını System.loadlibrary() işleviyle 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. Bu seçenek yoksa ekleyin. Kod, System.loadLibrary("your-native-lib") koduna benzer olmalı ve static bloğunda yer almalıdır.

  2. System.loadLibrary("your-native-lib") altında System.loadLibrary("memory_advice") ekleyin. Güncelleme aşağıdaki gibi görünmelidir:

     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ı ekleme

Projenize aşağıdaki kitaplık üstbilgi dosyasını ekleyin:

    #include <memory_advice/memory_advice.h>

Kitaplığı başlatma

Uygulama başladığında kitaplığı bir kez başlatmanız gerekir. Bunu yapmak için projenize şu kodu 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ğıran iş parçacığını JavaVM'ye eklediğinizden emin olun.

Bellek durumu için yoklama

Kitaplığı istediğiniz aralıklarla yoklayarak uygulamanızın bellek durumunu alabilirsiniz. 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 oluşturma

Ayrıca izleyici ayarlayabilir ve Memory Advice API'yi kaydedebilirsiniz. Durum sınıra yaklaştığında veya kritik bellek durumuna ulaştığında (ancak iyi durumda değilken) 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 bildirme sorunları için genel bakış bölümüne bakın.