Bắt đầu với API thông báo bộ nhớ

Hướng dẫn này mô tả cách tích hợp bản phát hành Jetpack của API thông báo bộ nhớ trong ứng dụng của bạn bằng Android Studio.

Đối với Trò chơi, bạn nên sử dụng bản phát hành Memory Advice API (API Thông báo bộ nhớ) theo đề xuất về môi trường tạo bản dựng của trò chơi đó. Đối với Android Studio, bạn nên sử dụng bản phát hành Jetpack. Để biết thông tin về các bản phát hành cho môi trường tạo bản dựng khác, chẳng hạn như Android Game Development Extension (AGDE), vui lòng xem phần Phân phối.

Thêm thư viện

Phần này mô tả cách thêm thư viện vào dự án Android Studio (Trình bổ trợ Android cho Gradle).

Thêm phần phụ thuộc

Để thêm thư viện vào dự án Android Studio của bạn, hãy hoàn tất các bước sau:

  1. Bật thư viện Android Jetpack ở cấp dự án gradle.properties), tệp này thường nằm trong thư mục gốc của dự án:

      android.useAndroidX=true
    
  2. Mở tệp build.gradle ở cấp mô-đun và thêm implementation sau đây vào khối phần phụ thuộc. Phần này khai báo các phần phụ thuộc của API thông báo bộ nhớ trong ứng dụng.

     dependencies {
         implementation 'androidx.games:games-memory-advice:1.0.0-beta01'
     }
    
  3. Chỉ định phiên bản NDK bên trong khối android:

     ndkVersion "23.1.7779620"
    

    Hãy nhớ chọn một phiên bản NDK tương thích với API thông báo bộ nhớ. Danh sách phiên bản NDK được hỗ trợ hiện có trên trang phát hành Android Games Jetpack.

  4. Khai báo cờ bản dựng bổ sung cho CMake. Để thực hiện việc này, hãy thêm mã sau vào khối defaultConfig bên trong khối android:

     externalNativeBuild {
         cmake {
             cppFlags '-std=c++14'
             // c++_shared flavor is the only supported STL type.
             arguments "-DANDROID_STL=c++_shared"
         }
     }
    
  5. Bật tính năng Prefab. Đối với trình bổ trợ Android cho Gradle (AGP) 4.1 trở lên, hãy thêm mã sau vào khối android:

     buildFeatures {
        prefab true
     }
    

    Nếu bạn đang sử dụng AGP 4.0 trở xuống, hãy xem trang Prefab để biết hướng dẫn định cấu hình.

  6. Lưu tệp. Nếu bạn thấy thông báo sau đây, hãy nhấp vào nút Sync Now (Đồng bộ hoá ngay) để cập nhật dự án của mình:

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

Định cấu hình bản dựng CMake cho bản C/C++

Để thêm tệp tiêu đề và thư viện thời gian chạy cho Memory Advice API (API Thông báo bộ nhớ), hãy mở tệp CMakeLists.txt chính của dự án. Ở ngăn Dự án, tệp nằm trong ứng dụng > src > main > cpp. Sau khi mở tệp, hãy thực hiện các bước sau:

  1. Ở gần đầu tệp, hãy thêm dòng dưới đây vào sau bất kỳ dòng cmake_minimum_requiredproject nào:

     find_package(games-memory-advice REQUIRED CONFIG)
    
  2. Trong lệnh target_link_libraries, hãy thêm games-memory-advice::memory_advice. Điều này khiến Memory Advice API (API thông báo bộ nhớ) phụ thuộc vào thư viện gốc của dự án và đưa API đó vào gói ứng dụng sau cùng của bạn. Bản cập nhật sẽ có dạng như sau:

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

Định cấu hình tệp Java

Thư viện gốc đi kèm với API thông báo bộ nhớ là libmemory_advice.so. Đây là phần phụ thuộc biên dịch cho thư viện chia sẻ C/C++ của riêng ứng dụng và được tự động tải khi ứng dụng tải thư viện chia sẻ của riêng ứng dụng đó bằng hàm System.loadlibrary().

Bước này là bước không bắt buộc.

  1. Tìm mã java trong dự án mà tải các thư viện gốc. Hãy thêm thông tin nếu mục đó không tồn tại. Mã này sẽ giống với System.loadLibrary("your-native-lib") và nằm trong một khối static.

  2. Thêm System.loadLibrary("memory_advice") trong System.loadLibrary("your-native-lib"). Bản cập nhật sẽ có dạng như sau:

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

Sử dụng thư viện

Phần này mô tả cách sử dụng thư viện.

Thêm tệp tiêu đề

Hãy đưa tệp tiêu đề thư viện sau vào dự án của bạn:

    #include <memory_advice/memory_advice.h>

Khởi chạy thư viện

Bạn cần khởi chạy thư viện một lần khi ứng dụng khởi động. Để làm vậy, hãy thêm mã này vào dự án của bạn:

    MemoryAdvice_init(env, activity);

Các thông số envactivity là các biến JNIEnv*jobject có trong thư viện gốc của bạn. Mọi lệnh gọi JNI đến thư viện gốc của bạn đều phải chứa các biến này. Nếu bạn đang sử dụng thư viện GameActivity, hãy nhớ đính kèm chuỗi gọi vào JavaVM trước khi gọi hàm MemoryAdvice_init.

Thăm dò ý kiến về trạng thái bộ nhớ

Bạn có thể truy xuất trạng thái bộ nhớ của ứng dụng bằng cách thăm dò ý kiến về thư viện theo khoảng thời gian bạn chọn. Dùng hàm MemoryAdvice_getMemoryState bất cứ khi nào bạn cần thăm dò ý kiến của thư việ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;
    }

Thiết lập trình theo dõi

Bạn cũng có thể thiết lập một trình theo dõi và đăng ký API thông báo bộ nhớ, đồng thời chức năng trình theo dõi sẽ được gọi khi trạng thái sắp đạt đến giới hạn hoặc trạng thái bộ nhớ cực thấp (nhưng không áp dụng cho trạng thái ok). Ví dụ: mã sau đây tạo ra một trình theo dõi và yêu cầu thông báo API thông báo bộ nhớ cứ mỗi 2 giây một lần:

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

Các bước tiếp theo

Vui lòng xem phần tổng quan để biết các tài nguyên khácbáo cáo các sự cố.