Trình quản lý SdkSandbox
public
final
class
SdkSandboxManager
extends Object
java.lang.Object | |
↳ | android.app.sdksandbox.SdkSandboxManager |
Cung cấp API để tải SDKs
vào
Quy trình hộp cát SDK, sau đó tương tác với chúng.
Hộp cát SDK là một quy trình java chạy trong một dải ô uid riêng biệt. Mỗi ứng dụng có thể có SDK riêng hộp cát.
Trước tiên, ứng dụng cần khai báo các SDK mà nó phụ thuộc trong tệp kê khai bằng thẻ <uses-sdk-library>
. Các ứng dụng chỉ có thể tải SDK mà chúng phụ thuộc vào hộp cát SDK.
Tóm tắt
Lớp lồng ghép | |
---|---|
interface |
SdkSandboxManager.SdkSandboxProcessDeathCallback
Lệnh gọi lại để theo dõi trường hợp hộp cát SDK sự kiện bị buộc tắt. |
Phương thức công khai | |
---|---|
void
|
addSdkSandboxProcessDeathCallback(Executor callbackExecutor, SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
Thêm lệnh gọi lại được đăng ký cho các sự kiện trong vòng đời hộp cát SDK, chẳng hạn như hộp cát SDK chết. |
void
|
addSyncedSharedPreferencesKeys(Set<String> keys)
Thêm khoá vào tập hợp các khoá đang được đồng bộ hoá từ |
List<AppOwnedSdkSandboxInterface>
|
getAppOwnedSdkSandboxInterfaces()
Tìm nạp danh sách |
List<SandboxedSdk>
|
getSandboxedSdks()
Tìm nạp thông tin về các SDK đã tải trong hộp cát. |
static
int
|
getSdkSandboxState()
Trả về trạng thái cung cấp hiện tại của tính năng hộp cát SDK. |
Set<String>
|
getSyncedSharedPreferencesKeys()
Trả về các khoá đã đặt đang được đồng bộ hoá từ |
void
|
loadSdk(String sdkName, Bundle params, Executor executor, OutcomeReceiver<SandboxedSdk, LoadSdkException> receiver)
Tải SDK trong quy trình java hộp cát SDK. |
void
|
registerAppOwnedSdkSandboxInterface(AppOwnedSdkSandboxInterface appOwnedSdkSandboxInterface)
Đăng ký |
void
|
removeSdkSandboxProcessDeathCallback(SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
Xoá |
void
|
removeSyncedSharedPreferencesKeys(Set<String> keys)
Xoá khoá khỏi tập hợp khoá đã được thêm bằng Các khoá bị xoá sẽ bị xoá khỏi hộp cát SDK nếu chúng đã được đồng bộ hoá. |
void
|
requestSurfacePackage(String sdkName, Bundle params, Executor callbackExecutor, OutcomeReceiver<Bundle, RequestSurfacePackageException> receiver)
Gửi yêu cầu về gói nền tảng đến SDK. |
void
|
startSdkSandboxActivity(Activity fromActivity, IBinder sdkActivityToken)
Bắt đầu một |
void
|
unloadSdk(String sdkName)
Gỡ tải SDK đã được phương thức gọi tải trước đó. |
void
|
unregisterAppOwnedSdkSandboxInterface(String name)
Huỷ đăng ký |
Các phương thức kế thừa | |
---|---|
Hằng số
Hàm EXTRA_DISPLAY_ID
public static final String EXTRA_DISPLAY_ID
Tên của khoá sẽ dùng trong các trường Bundle của requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
, giá trị của khoá phải xác định mã nhận dạng số nguyên của logic
màn hình để cho thấy SurfacePackage
.
Giá trị không đổi: "android.app.sdksandbox.extra.DISPLAY_ID"
THÊM_HEIGHT_IN_PIXELS
public static final String EXTRA_HEIGHT_IN_PIXELS
Tên khoá sẽ dùng trong trường Gói của requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
, giá trị của khoá phải xác định chiều cao số nguyên của SurfacePackage
tính bằng pixel.
Giá trị không đổi: "android.app.sdksandbox.extra.HEIGHT_IN_PIXELS"
Hàm EXTRA_HOST_TOKEN
public static final String EXTRA_HOST_TOKEN
Tên khoá sẽ được dùng trong các trường Gói của requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
, giá trị của khoá phải hiển thị mã thông báo do SurfaceView.getHostToken()
trả về sau khi SurfaceView
được
được thêm vào hệ phân cấp khung hiển thị. Chỉ chấp nhận giá trị không rỗng để bật tính năng báo cáo lỗi ANR.
Giá trị không đổi: "android.app.sdksandbox.extra.HOST_TOKEN"
GÓI_BỀN_BẢN_BỔ_DƯỠNG
public static final String EXTRA_SURFACE_PACKAGE
Tên của khoá trong Gói được truyền đến hàm onResult
của OutcomeReceiver
(là trường của requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
), giá trị của khoá này sẽ biểu thị SurfacePackage
được yêu cầu.
Giá trị không đổi: "android.app.sdksandbox.extra.SURFACE_PACKAGE"
THÊM_WIDTH_IN_PIXELS
public static final String EXTRA_WIDTH_IN_PIXELS
Tên khoá sẽ dùng trong trường Gói của requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
, giá trị của khoá phải xác định chiều rộng số nguyên của SurfacePackage
tính bằng pixel.
Giá trị không đổi: "android.app.sdksandbox.extra.WIDTH_IN_PIXELS"
LOAD_SDK_ĐÃ_ĐƯỢC_TẢI
public static final int LOAD_SDK_ALREADY_LOADED
SDK đã được tải.
Điều này cho thấy ứng dụng khách đã cố tải lại cùng một SDK bằng cách gọi loadSdk(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
sau khi được
đã tải thành công.
Giá trị không đổi: 101 (0x00000065)
LOAD_SDK_ĐÃ_XẢY_RA_LỖI_NỘI_BỘ
public static final int LOAD_SDK_INTERNAL_ERROR
Đã xảy ra lỗi nội bộ khi tải SDK.
Điều này cho thấy lỗi nội bộ chung đã xảy ra khi áp dụng lệnh gọi từ ứng dụng .
Giá trị không đổi: 500 (0x000001f4)
LOAD_SDK_KHÔNG_TÌM_THẤY
public static final int LOAD_SDK_NOT_FOUND
Không tìm thấy SDK.
Điều này cho thấy ứng dụng khách đã cố tải SDK không tồn tại bằng cách gọi loadSdk(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
.
Giá trị không đổi: 100 (0x00000064)
TẢI_SDK_SDK_DEFINED_ERROR
public static final int LOAD_SDK_SDK_DEFINED_ERROR
Lỗi SDK sau khi tải.
Điều này chỉ ra rằng SDK đã gặp lỗi trong quá trình khởi chạy sau khi tải. Chiến lược phát hành đĩa đơn
thông tin chi tiết về dữ liệu này có thể lấy từ Gói được trả về trong LoadSdkException
thông qua
OutcomeReceiver
được truyền vào SdkSandboxManager#loadSdk
.
Giá trị không đổi: 102 (0x00000066)
TẢI_SDK_SDK_SAND_HÀNG_TẮT_SDK
public static final int LOAD_SDK_SDK_SANDBOX_DISABLED
Hộp cát SDK bị tắt.
Thông báo này cho biết hộp cát SDK đã bị tắt. Mọi nỗ lực tải SDK sau này trong thì quá trình khởi động này cũng sẽ không thành công.
Giá trị không đổi: 103 (0x00000067)
YÊU_CẦU_GÓI_NỀN_TẢNG_ĐÃ_XẢY_RA_LỖI_NỘI_BỘ
public static final int REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
Đã xảy ra lỗi nội bộ khi yêu cầu SurfacePackage
.
Điều này cho thấy lỗi nội bộ chung đã xảy ra khi yêu cầu SurfacePackage
.
Giá trị không đổi: 700 (0x000002bc)
YÊU_ CẦU_SURFACE_PACKAGE_SDK_KHÔNG_TẢI_TẢI
public static final int REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED
SDK không được tải khi yêu cầu SurfacePackage
.
Điều này cho thấy SDK mà SurfacePackage
đang được yêu cầu không phải
do hộp cát đã ngừng hoạt động hoặc do hộp cát không được tải ngay từ đầu.
Giá trị không đổi: 701 (0x000002bd)
SDK_SAND HỘP_XỬ LÝ_NOT_AVAILABLE
public static final int SDK_SANDBOX_PROCESS_NOT_AVAILABLE
Không có quy trình hộp cát SDK.
Mã này cho biết rằng quy trình hộp cát SDK không có sẵn vì quy trình này đã ngừng hoạt động, đã bị ngắt kết nối hoặc không được tạo ngay từ đầu.
Giá trị không đổi: 503 (0x000001f7)
DỊCH_VỤ_HỘP_CÁT_SDK
public static final String SDK_SANDBOX_SERVICE
Sử dụng với Context#getSystemService(String)
để truy xuất SdkSandboxManager
để tương tác với các SDK thuộc ứng dụng này.
Giá trị không đổi: "sdk_sandbox"
TRẠNG_THÁI_HỘP_CÁT_SDK_ĐÃ_TẮT
public static final int SDK_SANDBOX_STATE_DISABLED
Hộp cát SDK bị tắt.
Các API SdkSandboxManager
bị ẩn. Số lần thử gọi sẽ dẫn đến UnsupportedOperationException
.
Giá trị hằng số: 0 (0x00000000)
SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
public static final int SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
Hộp cát SDK được bật.
Ứng dụng có thể sử dụng các API SdkSandboxManager
để tải SDKs
mà nó phụ thuộc vào
quy trình hộp cát SDK tương ứng.
Giá trị không đổi: 2 (0x00000002)
Phương thức công khai
addSdkSandboxProcessDeathCallback
public void addSdkSandboxProcessDeathCallback (Executor callbackExecutor, SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
Thêm lệnh gọi lại được đăng ký cho các sự kiện trong vòng đời hộp cát SDK, chẳng hạn như hộp cát SDK chết. Nếu hộp cát chưa được tạo khi lệnh này được gọi, yêu cầu sẽ được được lưu trữ cho tới khi hộp cát được tạo, tại thời điểm hộp cát được kích hoạt cho hộp cát đó. Nhiều Bạn có thể thêm các lệnh gọi lại để phát hiện trường hợp bị gián đoạn và sẽ không bị xoá khi hộp cát ngừng hoạt động.
Tham số | |
---|---|
callbackExecutor |
Executor : Executor để gọi lệnh gọi lại
Giá trị này không được là null .
Các sự kiện gọi lại và trình nghe được gửi đi thông qua
Executor này, giúp bạn dễ dàng kiểm soát chuỗi nào được sử dụng. Để gửi thông báo các sự kiện thông qua chuỗi chính trong ứng dụng, bạn có thể sử dụng Context.getMainExecutor() .
Nếu không, hãy cung cấp Executor để gửi đến một luồng phù hợp. |
callback |
SdkSandboxManager.SdkSandboxProcessDeathCallback : SdkSandboxProcessDeathCallback sẽ nhận hộp cát SDK
các sự kiện trong vòng đời.
Giá trị này không được là null . |
addSyncedSharedPreferencesKeys
public void addSyncedSharedPreferencesKeys (Set<String> keys)
Thêm khoá vào tập hợp các khoá đang được đồng bộ hoá từ SharedPreferences
mặc định của ứng dụng với SDK
hộp cát.
Dữ liệu đã đồng bộ hoá sẽ được SDK đọc bằng API SdkSandboxController.getClientSharedPreferences()
.
Để dừng đồng bộ hoá bất kỳ khoá nào đã được thêm bằng API này, hãy sử dụng removeSyncedSharedPreferencesKeys(java.util.Set)
.
Quá trình đồng bộ hoá bị gián đoạn nếu ứng dụng khởi động lại và người dùng phải gọi lại API này để xây dựng lại nhóm khoá để đồng bộ hoá.
Lưu ý: Lớp này không hỗ trợ việc sử dụng trong nhiều quy trình.
Tham số | |
---|---|
keys |
Set : tập hợp các khoá sẽ được đồng bộ hoá với Hộp cát.
Giá trị này không được là null . |
getAppOwnedSdkSandboxInterfaces
public List<AppOwnedSdkSandboxInterface> getAppOwnedSdkSandboxInterfaces ()
Tìm nạp danh sách AppOwnedSdkSandboxInterface
đã đăng ký cho một ứng dụng
Giá trị trả về | |
---|---|
List<AppOwnedSdkSandboxInterface> |
danh sách trống nếu không tìm thấy CallInfo trên bản đồ, nếu không có danh sách AppOwnedSdkSandboxInterface
Giá trị này không được là null . |
getSandboxedSdk
public List<SandboxedSdk> getSandboxedSdks ()
Tìm nạp thông tin về các SDK đã tải trong hộp cát.
Giá trị trả về | |
---|---|
List<SandboxedSdk> |
Danh sách SandboxedSdk chứa mọi SDK đang tải.
Giá trị này không được là null . |
Có trạng thái Hộp cát Sdk
public static int getSdkSandboxState ()
Trả về trạng thái cung cấp hiện tại của tính năng hộp cát SDK.
Giá trị trả về | |
---|---|
int |
Giá trị là SDK_SANDBOX_STATE_DISABLED hoặc SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION |
getSyncedSharedPreferencesKeys
public Set<String> getSyncedSharedPreferencesKeys ()
Trả về các khoá đã đặt đang được đồng bộ hoá từ SharedPreferences
mặc định của ứng dụng đến
hộp cát SDK.
Giá trị trả về | |
---|---|
Set<String> |
Giá trị này không được là null . |
tải Sdk
public void loadSdk (String sdkName, Bundle params, Executor executor, OutcomeReceiver<SandboxedSdk, LoadSdkException> receiver)
Tải SDK trong quy trình java hộp cát SDK.
Tải thư viện SDK có sdkName
vào quy trình hộp cát SDK theo cách không đồng bộ. Chiến lược phát hành đĩa đơn
người gọi sẽ được thông báo qua receiver
.
Phương thức gọi phải khai báo SDKs
mà nó phụ thuộc trong tệp kê khai bằng thẻ <uses-sdk-library>
. Phương thức gọi chỉ có thể tải SDKs
mà nó tuỳ thuộc vào SDK
hộp cát.
Khi ứng dụng khách tải SDK đầu tiên, một quy trình hộp cát SDK mới sẽ đã tạo. Nếu hộp cát đã được tạo cho ứng dụng khách, các SDK bổ sung sẽ được tải vào cùng một hộp cát.
API này chỉ có thể được gọi khi phương thức gọi đang chạy ở nền trước. Cuộc gọi từ
nền sẽ dẫn đến trả về LoadSdkException
trong receiver
.
Tham số | |
---|---|
sdkName |
String : tên của SDK cần tải.
Giá trị này không được là null . |
params |
Bundle : các tham số bổ sung sẽ được truyền đến SDK ở dạng Bundle
theo thoả thuận giữa ứng dụng và SDK.
Giá trị này không được là null . |
executor |
Executor : Executor để gọi trình nhận.
Giá trị này không được là null .
Các sự kiện gọi lại và trình nghe được gửi đi thông qua
Executor này, giúp bạn dễ dàng kiểm soát chuỗi nào được sử dụng. Để gửi thông báo các sự kiện thông qua chuỗi chính trong ứng dụng, bạn có thể sử dụng Context.getMainExecutor() .
Nếu không, hãy cung cấp Executor để gửi đến một luồng phù hợp. |
receiver |
OutcomeReceiver : Hàm này sẽ nhận được SandboxedSdk khi chạy thành công hoặc LoadSdkException .
Giá trị này không được là null . |
subscriptionAppOwnedSdkSandboxInterface
public void registerAppOwnedSdkSandboxInterface (AppOwnedSdkSandboxInterface appOwnedSdkSandboxInterface)
Đăng ký AppOwnedSdkSandboxInterface
cho một quy trình ứng dụng.
Đăng ký một AppOwnedSdkSandboxInterface
có cùng tên với
giao diện đã đăng ký sẽ dẫn đến IllegalStateException
.
AppOwnedSdkSandboxInterface#getName()
cho biết tên của giao diện.
Tham số | |
---|---|
appOwnedSdkSandboxInterface |
AppOwnedSdkSandboxInterface : AppOwnedSdkSandboxInterface sẽ được đăng ký
Giá trị này không được là null . |
removeSdkSandboxProcessDeathCallback
public void removeSdkSandboxProcessDeathCallback (SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
Xoá SdkSandboxProcessDeathCallback
từng được thêm vào bằng addSdkSandboxProcessDeathCallback(java.util.concurrent.Executor, android.app.sdksandbox.SdkSandboxManager.SdkSandboxProcessDeathCallback)
Tham số | |
---|---|
callback |
SdkSandboxManager.SdkSandboxProcessDeathCallback : SdkSandboxProcessDeathCallback đã được thêm trước đó bằng
SdkSandboxManager#addSdkSandboxProcessDeathCallback(Executor,
SdkSandboxProcessDeathCallback)
Giá trị này không được là null . |
removeSyncedSharedPreferencesKeys
public void removeSyncedSharedPreferencesKeys (Set<String> keys)
Xoá khoá khỏi tập hợp khoá đã được thêm bằng addSyncedSharedPreferencesKeys(java.util.Set)
Các khoá bị xoá sẽ bị xoá khỏi hộp cát SDK nếu chúng đã được đồng bộ hoá.
Tham số | |
---|---|
keys |
Set : tập hợp tên khoá sẽ không còn được đồng bộ hoá với Hộp cát nữa.
Giá trị này không được là null . |
requestSurfacePackage
public void requestSurfacePackage (String sdkName, Bundle params, Executor callbackExecutor, OutcomeReceiver<Bundle, RequestSurfacePackageException> receiver)
Gửi yêu cầu về gói nền tảng đến SDK.
Sau khi ứng dụng nhận được tín hiệu về việc tải SDK thành công và
thêm SurfaceView
vào hệ phân cấp khung hiển thị, nó có thể yêu cầu không đồng bộ
SurfacePackage
để kết xuất khung hiển thị từ SDK.
Khi SurfacePackage
đã sẵn sàng, lệnh gọi lại OutcomeReceiver#onResult
của
receiver
đã thông qua sẽ được gọi ra. Lệnh gọi lại này sẽ chứa một Bundle
chứa khoá SdkSandboxManager#EXTRA_SURFACE_PACKAGE
có
giá trị được liên kết là SurfacePackage
được yêu cầu.
params
đã truyền phải chứa các khoá sau: EXTRA_WIDTH_IN_PIXELS
, SdkSandboxManager#EXTRA_HEIGHT_IN_PIXELS
,
SdkSandboxManager#EXTRA_DISPLAY_ID
và SdkSandboxManager#EXTRA_HOST_TOKEN
. Nếu
bất kỳ khoá nào trong số này bị thiếu hoặc không hợp lệ, thì hệ thống sẽ gửi IllegalArgumentException
.
API này chỉ có thể được gọi khi phương thức gọi đang chạy ở nền trước. Cuộc gọi từ
nền sẽ dẫn đến việc trả về RequestSurfacePackageException trong receiver
.
Tham số | |
---|---|
sdkName |
String : tên của SDK được tải vào hộp cát SDK.
Giá trị này không được là null . |
params |
Bundle : các thông số mà ứng dụng khách truyền đến SDK.
Giá trị này không được là null . |
callbackExecutor |
Executor : Executor để gọi lệnh gọi lại
Giá trị này không được là null .
Các sự kiện gọi lại và trình nghe được gửi đi thông qua
Executor này, giúp bạn dễ dàng kiểm soát chuỗi nào được sử dụng. Để gửi thông báo các sự kiện thông qua chuỗi chính trong ứng dụng, bạn có thể sử dụng Context.getMainExecutor() .
Nếu không, hãy cung cấp Executor để gửi đến một luồng phù hợp. |
receiver |
OutcomeReceiver : Hàm này trả về Bundle khi thành công và có chứa khoá
SdkSandboxManager#EXTRA_SURFACE_PACKAGE có giá trị SurfacePackage hoặc
RequestSurfacePackageException khi không thành công.
Giá trị này không được là null . |
Gửi | |
---|---|
IllegalArgumentException |
nếu params không chứa mọi khoá bắt buộc. |
Hoạt động startSdkSandbox
public void startSdkSandboxActivity (Activity fromActivity, IBinder sdkActivityToken)
Bắt đầu một Activity
trong hộp cát SDK.
Hàm này sẽ bắt đầu một Activity
mới trong cùng một tác vụ của fromActivity
đã truyền và chuyển nó vào SDK dùng chung sdkActivityToken
đã truyền mà
sẽ xác định một yêu cầu từ SDK đó để thống kê Activity
này.
Activity
sẽ không khởi động trong các trường hợp sau:
- Ứng dụng gọi API này đang chạy ở chế độ nền.
sdkActivityToken
đã truyền không liên kết với yêu cầuActivity
tạo thành SDK dùng chung với ứng dụng gọi.- SDK chia sẻ
sdkActivityToken
được truyền đã xoá yêu cầu của SDK nàyActivity
- Hộp cát
Activity
đã được tạo.
Tham số | |
---|---|
fromActivity |
Activity : Activity sẽ được dùng để khởi động hộp cát mới Activity bằng cách gọi Activity#startActivity(Intent) dựa trên hộp cát đó.
Giá trị này không được là null . |
sdkActivityToken |
IBinder : giá trị nhận dạng được chia sẻ bởi SDK yêu cầu Activity .
Giá trị này không được là null . |
gỡ tải SDK
public void unloadSdk (String sdkName)
Gỡ tải SDK đã được phương thức gọi tải trước đó.
Chúng tôi không đảm bảo rằng bộ nhớ được phân bổ cho SDK này sẽ được giải phóng ngay lập tức. Tất cả
các lệnh gọi tiếp theo đến requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
cho sdkName
đã cho sẽ không thành công.
API này chỉ có thể được gọi khi phương thức gọi đang chạy ở nền trước. Cuộc gọi từ
nền sẽ dẫn đến việc gửi SecurityException
.
Tham số | |
---|---|
sdkName |
String : tên của SDK cần huỷ tải.
Giá trị này không được là null . |
Huỷ đăng kýAppOwnedSdkSandboxInterface
public void unregisterAppOwnedSdkSandboxInterface (String name)
Huỷ đăng ký ERROR(/AppOwnedSdkSandboxInterfaces)
cho một quy trình ứng dụng.
Tham số | |
---|---|
name |
String : tên mà AppOwnedSdkSandboxInterface được đăng ký.
Giá trị này không được là null . |