Inizia a utilizzare l'API Memory Advice

Questa guida descrive come integrare la release Jetpack dell'API Memory Advice nella tua app utilizzando Android Studio.

I giochi devono usare la release dell'API Memory Advice consigliata per il loro ambiente di build. Per Android Studio, consigliamo la release Jetpack. Per informazioni sulle release per altri ambienti di build, ad esempio Android Game Development Extension (AGDE), consulta Distribuzioni.

Aggiungi la libreria

Questa sezione descrive come aggiungere la libreria al tuo progetto Android Studio (plug-in Gradle Android).

Aggiungi le dipendenze

Per aggiungere la libreria al tuo progetto Android Studio, procedi nel seguente modo:

  1. Abilita la libreria Android Jetpack a livello di progetto gradle.properties), il file solitamente si trova nella directory radice del progetto:

      android.useAndroidX=true
    
  2. Apri il file build.gradle a livello di modulo e aggiungi quanto segue implementation al blocco delle dipendenze. In questo modo vengono dichiarate le dipendenze dell'API per la consulenza sulla memoria nella tua app.

     dependencies {
         implementation 'androidx.games:games-memory-advice:1.0.0-beta01'
     }
    
  3. Specifica la versione NDK all'interno del blocco android:

     ndkVersion "23.1.7779620"
    

    Assicurati di scegliere una versione dell'NDK compatibile con l'API Memory Advice. È disponibile un elenco delle versioni NDK supportate nella pagina della release Jetpack per i giochi Android.

  4. Dichiara flag di build aggiuntivi per CMake. Per farlo, aggiungi il seguente codice al blocco defaultConfig che si trova all'interno del blocco android:

     externalNativeBuild {
         cmake {
             cppFlags '-std=c++14'
             // c++_shared flavor is the only supported STL type.
             arguments "-DANDROID_STL=c++_shared"
         }
     }
    
  5. Attiva la funzionalità Prefabbricata. Per il plug-in Android per Gradle(AGP) 4.1 o versioni successive, aggiungi il seguente codice al blocco android:

     buildFeatures {
        prefab true
     }
    

    Se utilizzi AGP 4.0 o versioni precedenti, consulta la pagina Prefabbricati per le istruzioni di configurazione.

  6. Salva il file. Se viene visualizzato il seguente messaggio, fai clic sul pulsante Sync Now (Sincronizza ora) per aggiornare il progetto:

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

Configurazione di CMake per la build C/C++

Per aggiungere al progetto i file di intestazione e la libreria di runtime per l'API Memory Advice, apri il file CMakeLists.txt principale del progetto. Nel riquadro Progetto, il file si trova in app > src > main > cpp. Dopo aver aperto il file, segui questi passaggi:

  1. Nella parte superiore del file, aggiungi la seguente riga dopo ogni riga cmake_minimum_required e project:

     find_package(games-memory-advice REQUIRED CONFIG)
    
  2. Nel comando target_link_libraries, aggiungi games-memory-advice::memory_advice. Questo rende l'API Memory Advice una dipendenza dalla libreria nativa del tuo progetto e la include nel pacchetto dell'applicazione finale. L'aggiornamento dovrebbe essere simile al seguente:

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

Configura i file Java

La libreria nativa inclusa nell'API Memory Advice è libmemory_advice.so. Si tratta di una dipendenza di compilazione per la libreria condivisa C/C++ dell'app che viene caricata automaticamente quando l'app carica la propria libreria condivisa con la funzione System.loadlibrary().

Questo passaggio è facoltativo.

  1. Trova il codice Java nel progetto che carica le librerie native. Se non esiste, aggiungilo. Il codice dovrebbe avere un aspetto simile a quello di System.loadLibrary("your-native-lib") e trovarsi in un blocco static.

  2. Aggiungi System.loadLibrary("memory_advice") in System.loadLibrary("your-native-lib"). L'aggiornamento dovrebbe essere simile al seguente:

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

Utilizzare la libreria

Questa sezione descrive come utilizzare la libreria.

Aggiungi i file di intestazione

Includi il seguente file di intestazione della libreria nel progetto:

    #include <memory_advice/memory_advice.h>

Inizializzare la libreria

Devi inizializzare la libreria una volta all'avvio dell'app. Per farlo, aggiungi questo codice al tuo progetto:

    MemoryAdvice_init(env, activity);

I parametri env e activity sono le variabili JNIEnv* e jobject che dovrebbero essere disponibili per la tua libreria nativa. Ogni chiamata JNI alla tua libreria nativa deve contenere queste variabili. Se utilizzi la libreria GameActivity, assicurati di collegare il thread di chiamata a JavaVM prima di chiamare la funzione MemoryAdvice_init.

Sondaggio per stato memoria

Puoi recuperare lo stato della memoria della tua app eseguendo il polling della libreria in corrispondenza dell'intervallo che preferisci. Utilizza la funzione MemoryAdvice_getMemoryState ogni volta che devi eseguire il polling della libreria:

    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;
    }

Configura uno spettatore

Puoi anche configurare un watcher e registrare l'API Memory Advice, in modo che la funzione watcher venga chiamata quando lo stato sta per raggiungere il limite o lo stato di memoria critico (ma non per lo stato ok). Ad esempio, il codice seguente crea un watcher e richiede una notifica API Memory Advice ogni 2 secondi:

    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);

Passaggio successivo

Consulta la panoramica per risorse aggiuntive e problemi relativi ai report.