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

Bu kılavuzda, Google Etiket Yöneticisi'nin Android için Jetpack Bellek Tavsiye API'si Android Studio'yu kullanarak.

Oyunlar, Memory Advice API sürümünü kullanmalı önerilir. Android Studio için Jetpack kullanıma sunuldu. Diğer derleme ortamlarına yönelik sürümler hakkında bilgi için: örneğin Android Game Development Extension (AGDE) için Dağıtımlar bölümünü inceleyin.

Kitaplığı ekleme

Bu bölümde, kitaplığı Android Studio (Android Studio) Gradle Plugin) projesi için gereklidir.

Bağımlılıkları ekleme

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 kök dizinde bulunur. bir örneğidir:

      android.useAndroidX=true
    
  2. Modül düzeyindeki build.gradle dosyasını açın ve aşağıdakini ekleyin Bağımlılıklar bloğuna implementation. Bu, hafıza önerileri API'sini tanımlar tespit etme.

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

     ndkVersion "23.1.7779620"
    

    NDK'nın, Memory Advice API ile uyumlu bir sürümünü 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 işaretleri bildirin. Bunu yapmak için aşağıdaki kodu android bloğunun içinde olan defaultConfig blok:

     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ümler için aşağıdaki kodu android blok:

     buildFeatures {
        prefab true
     }
    

    AGP 4.0 veya daha eski bir sürüm kullanıyorsanız Prefab sayfası bakın.

  6. Dosyayı kaydedin. Aşağıdaki mesajı görürseniz Sync Now (Şimdi Senkronize Et) seçeneğini tıklayın. 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

Memory Advice API için başlık dosyalarını ve çalışma zamanı kitaplığını eklemek projenize eklemek için projenizin ana CMakeLists.txt dosyasını açın. Proje bölmesinde, dosya uygulama içinde > src > ana > cpp olarak ayarlanır. dosyasında aşağıdaki adımları uygulayın:

  1. Dosyanın üst kısmına yakın bir yerde, cmake_minimum_required ve project satır:

     find_package(games-memory-advice REQUIRED CONFIG)
    
  2. target_link_libraries komutuna games-memory-advice::memory_advice. Bu işlem, Memory Advice API'yi projenizin yerel kitaplığına bir bağımlılık oluşturur ve son uygulama paketinize ekler. Güncelleme aşağıdakine benzer bir görünümde 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 Uygulamanızın kendi uygulamanıza ait bir derleme bağımlılığıdır C/C++ paylaşılan kitaplığı ve uygulamanız kendi kitaplığını yüklediğinde otomatik olarak yüklenir System.loadlibrary() işleviyle paylaşılan kitaplık.

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

  1. Projenizde yerel kitaplıkları yükleyen Java kodunu bulun. Eğer yoksa ekleyin. Kod System.loadLibrary("your-native-lib") ile benzer olmalıdır. static bloğunda bulunuyor.

  2. Altına System.loadLibrary("memory_advice") ekle System.loadLibrary("your-native-lib"). Güncelleme, şu:

     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 şu kitaplık başlığı dosyasını ekleyin:

    #include <memory_advice/memory_advice.h>

Kitaplığı ilk kullanıma hazırlama

Uygulama başlatıldığında kitaplığı ilk kullanıma hazırlamanız gerekir. Bunu yapmak için, şunu ekleyin: kodunu ekleyin:

    MemoryAdvice_init(env, activity);

env ve activity parametreleri JNIEnv* ve jobject değişkenleridir yerel kitaplığınızda kullanılabilir. Yerel hesabınıza yapılan her JNI çağrısı kitaplığınız bu değişkenleri içermelidir. GameActivity kitaplığı, mutlaka çağrı ileti dizisini JavaVM'ye ekleyin MemoryAdvice_init işlevini çağırmadan önce

Bellek durumu için anket

Uygulamanızın bellek durumunu şurada kitaplığı yoklayarak alabilirsiniz: belirleneceğini konuşacağız. Şunu kullanın: 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 kurun

Ayrıca reklamları izleyici Memory Advice API'sini kaydedin ve izleyici fonksiyonunuz sınıra ya da kritik sınıra yaklaştığında bellek durumu (ama ok durumu için değil). Örneğin, aşağıdaki kod bir izleyici oluşturur ve her 2 saniyede bir Memory Advice API bildirimi istiyor:

    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?

Şunlar için genel bakış ek kaynaklar ve sorunları bildirmenin bir yoludur.