Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

客戶端用法

您可以重構條件編譯的代碼,以從HAL接口動態讀取值。例如:

#ifdef TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS
//some code fragment
#endif

然後,框架代碼可以調用<configstore/Utils.h>定義的適當的實用程序函數,具體取決於其類型。

ConfigStore示例

此示例顯示讀取TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS (在ConfigStore HAL中定義為forceHwcForVirtualDisplays() ,返回類型為OptionalBool

#include <configstore/Utils.h>
using namespace android::hardware::configstore;
using namespace android::hardware::configstore::V1_0;

static bool vsyncPhaseOffsetNs = getBool<ISurfaceFlingerConfigs,
        ISurfaceFlingerConfigs::forceHwcForVirtualDisplays>(false);

效用函數( getBool在上面的例子中)接觸configstore服務來獲得用於接口功能的代理手柄,然後通過經由HIDL / hwbinder調用句柄中檢索該值。

實用功能

<configstore/Utils.h>configstore/1.0/include/configstore/Utils.h )為每種原始返回類型提供實用程序功能,包括Optional[Bool|String|Int32|UInt32|Int64|UInt64] ,如下所示:

類型功能(省略模板參數)
OptionalBool bool getBool(const bool defValue)
OptionalInt32 int32_t getInt32(const int32_t defValue)
OptionalUInt32 uint32_t getUInt32(const uint32_t defValue)
OptionalInt64 int64_t getInt64(const int64_t defValue)
OptionalUInt64 uint64_t getUInt64(const uint64_t defValue)
OptionalString std::string getString(const std::string &defValue)

defValue是HAL實現未為配置項指定值時返回的默認值。每個函數都有兩個模板參數:

  • I是接口類名。
  • Func是用於獲取配置項的成員函數指針。

由於配置值是只讀的並且不會更改,因此實用程序功能會在內部緩存配置值。使用同一鏈接單元中的緩存值,可以更有效地處理後續調用。

使用configstore-utils

ConfigStore HAL設計為與次要版本升級具有向前兼容性,這意味著在修訂HAL且某些框架代碼使用新引入的項時,仍可以使用/vendor具有較早次要版本的ConfigStore服務。

為了向前兼容,請確保您的實施遵循以下準則:

  1. 舊版本的服務可用時,新項目將使用默認值。示例:
    service = V1_1::IConfig::getService(); // null if V1_0 is installed
    value = DEFAULT_VALUE;
      if(service) {
        value = service->v1_1API(DEFAULT_VALUE);
      }
    
  2. 客戶端使用包含ConfigStore項的第一個接口。示例:
    V1_1::IConfig::getService()->v1_0API(); // NOT ALLOWED
    
    V1_0::IConfig::getService()->v1_0API(); // OK
    
  3. 可以為舊版本的界面檢索新版本的服務。在以下示例中,如果安裝的版本是v1_1,則必須為getService()返回v1_1服務:
    V1_0::IConfig::getService()->v1_0API();
    

當使用configstore-utils庫中的訪問函數來訪問ConfigStore項時,實現將保證#1,編譯器錯誤將保證#2。由於這些原因,我們強烈建議盡可能使用configstore-utils