Native Activity
摘要
类型定义 |
|
---|---|
AInputReceiver
|
typedefstruct AInputReceiver
保存对已注册输入通道引用的 InputReceiver。 |
AInputReceiverCallbacks
|
typedefstruct AInputReceiverCallbacks
|
AInputReceiver_onKeyEvent)(void *_Null_unspecified context, AInputEvent *_Nonnull keyEvent)
|
typedefbool(*
当已注册的输入通道收到按键事件时,会调用 AInputReceiver_onKeyEvent 回调。 |
AInputReceiver_onMotionEvent)(void *_Null_unspecified context, AInputEvent *_Nonnull motionEvent)
|
typedefbool(*
当已注册的输入通道收到运动事件时,会调用 AInputReceiver_onMotionEvent 回调。 |
AInputTransferToken
|
typedefstruct AInputTransferToken
AInputTransferToken 可用于请求焦点或在嵌入式 SurfaceControl 之间转移触控手势。 |
ANativeActivity
|
typedefstruct ANativeActivity
此结构定义 android.app.NativeActivity 的原生端。 |
ANativeActivityCallbacks
|
typedefstruct ANativeActivityCallbacks
这些是框架对原生应用进行的回调。 |
ANativeActivity_createFunc(ANativeActivity *activity, void *savedState, size_t savedStateSize)
|
typedefvoid
这是必须位于原生代码中用于实例化应用原生 activity 的函数。 |
ARect
|
typedefstruct ARect
矩形窗口区域。 |
ASurfaceControl
|
typedefstruct ASurfaceControl
SurfaceControl API 可用于提供 surface 层次结构,以便与系统合成器进行合成。 |
ASurfaceTransaction
|
typedefstruct ASurfaceTransaction
ASurfaceTransaction 是必须原子化应用的 surface 树更新集合。 |
ASurfaceTransactionStats
|
typedefstruct ASurfaceTransactionStats
回调期间返回的不透明句柄,可用于查询一般统计信息,以及查询在此事务应用后被移除或缓冲区已更新的 surface 的统计信息。 |
ASurfaceTransaction_OnBufferRelease)(void *_Null_unspecified context, int release_fence_fd)
|
typedefvoid(*
当通过 ASurfaceTransaction_setBuffer 传入的缓冲区可供重复使用时,会调用 ASurfaceTransaction_OnBufferRelease 回调。 |
ASurfaceTransaction_OnCommit)(void *_Null_unspecified context, ASurfaceTransactionStats *_Nonnull stats)
|
typedefvoid(*
当事务应用且更新准备好呈现时,会调用 ASurfaceTransaction_OnCommit 回调。 |
ASurfaceTransaction_OnComplete)(void *_Null_unspecified context, ASurfaceTransactionStats *_Nonnull stats)
|
typedefvoid(*
由于事务是异步应用的,因此可以使用 ASurfaceTransaction_OnComplete 回调来在呈现包含事务中更新的帧时收到通知。 |
变量 |
|
---|---|
ANativeActivity_onCreate
|
NativeInstance 在启动其原生代码时查找的函数名称。
|
函数 |
|
---|---|
AInputReceiverCallbacks_create(void *_Nullable context)
|
AInputReceiverCallbacks *_Nonnull
创建 AInputReceiverCallbacks 对象,该对象在注册 AInputReceiver 时使用。
|
AInputReceiverCallbacks_release(AInputReceiverCallbacks *_Nullable callbacks)
|
void
释放 AInputReceiverCallbacks。
|
AInputReceiverCallbacks_setKeyEventCallback(AInputReceiverCallbacks *_Nonnull callbacks, AInputReceiver_onKeyEvent _Nonnull onKeyEvent)
|
void
为 AInputReceiverCallbacks 设置 AInputReceiver_onKeyEvent 回调。
|
AInputReceiverCallbacks_setMotionEventCallback(AInputReceiverCallbacks *_Nonnull callbacks, AInputReceiver_onMotionEvent _Nonnull onMotionEvent)
|
void
为 AInputReceiverCallbacks 设置 AInputReceiver_onMotionEvent 回调。
|
AInputReceiver_createBatchedInputReceiver(AChoreographer *_Nonnull aChoreographer, const AInputTransferToken *_Nonnull hostInputTransferToken, const ASurfaceControl *_Nonnull aSurfaceControl, AInputReceiverCallbacks *_Nonnull aInputReceiverCallbacks)
|
AInputReceiver *_Nonnull
为 ASurfaceControl 注册输入接收器,该接收器将接收批量输入事件。
|
AInputReceiver_createUnbatchedInputReceiver(ALooper *_Nonnull aLooper, const AInputTransferToken *_Nonnull hostInputTransferToken, const ASurfaceControl *_Nonnull aSurfaceControl, AInputReceiverCallbacks *_Nonnull aInputReceiverCallbacks)
|
AInputReceiver *_Nonnull
为 ASurfaceControl 注册输入接收器,该接收器将接收每个输入事件。
|
AInputReceiver_getInputTransferToken(AInputReceiver *_Nonnull aInputReceiver)
|
const AInputTransferToken *_Nonnull
返回 AInputTransferToken,该 token 可用于在其他窗口之间转移触控手势。
|
AInputReceiver_release(AInputReceiver *_Nullable aInputReceiver)
|
void
注销输入通道并删除 AInputReceiver。
|
AInputTransferToken_fromJava(JNIEnv *_Nonnull env, jobject _Nonnull inputTransferTokenObj)
|
AInputTransferToken *_Nonnull
返回由 Java InputTransferToken 对象封装的 AInputTransferToken。
|
AInputTransferToken_release(AInputTransferToken *_Nullable aInputTransferToken)
|
void
移除先前在原生代码中获取的引用。
|
AInputTransferToken_toJava(JNIEnv *_Nonnull env, const AInputTransferToken *_Nonnull aInputTransferToken)
|
jobject _Nonnull
返回封装 AInputTransferToken 的 Java InputTransferToken 对象。
|
ANativeActivity_finish(ANativeActivity *activity)
|
void
结束给定的 activity。
|
ANativeActivity_hideSoftInput(ANativeActivity *activity, uint32_t flags)
|
void
在给定 activity 中隐藏 IME(输入法编辑器)。
|
ANativeActivity_setWindowFlags(ANativeActivity *activity, uint32_t addFlags, uint32_t removeFlags)
|
void
更改给定 activity 的窗口标志。
|
ANativeActivity_setWindowFormat(ANativeActivity *activity, int32_t format)
|
void
更改给定 activity 的窗口格式。
|
ANativeActivity_showSoftInput(ANativeActivity *activity, uint32_t flags)
|
void
在给定 activity 中显示 IME(输入法编辑器)。
|
ANativeWindow_fromSurface(JNIEnv *env, jobject surface)
|
返回与 Java Surface 对象关联的 ANativeWindow,以便通过原生代码与其互动。
|
ANativeWindow_toSurface(JNIEnv *env, ANativeWindow *window)
|
jobject
返回派生自 ANativeWindow 的 Java Surface 对象,以便通过 Java 代码与其互动。
|
ASurfaceControl_acquire(ASurfaceControl *_Nonnull surface_control)
|
void
获取给定 ASurfaceControl 对象的引用。
|
ASurfaceControl_create(ASurfaceControl *_Nonnull parent, const char *_Nonnull debug_name)
|
ASurfaceControl *_Nullable
请参阅 ASurfaceControl_createFromWindow。
|
ASurfaceControl_createFromWindow(ANativeWindow *_Nonnull parent, const char *_Nonnull debug_name)
|
ASurfaceControl *_Nullable
创建以 ANativeWindow 或 ASurfaceControl 作为其父级的 ASurfaceControl。
|
ASurfaceControl_fromJava(JNIEnv *_Nonnull env, jobject _Nonnull surfaceControlObj)
|
ASurfaceControl *_Nonnull
返回由 Java SurfaceControl 对象封装的 ASurfaceControl。
|
ASurfaceControl_release(ASurfaceControl *_Nonnull surface_control)
|
void
移除先前通过以下任一函数获取的引用:ASurfaceControl_createFromWindow、ASurfaceControl_create、ANativeWindow_acquire。只要其父级仍显示,surface 及其子级就可能仍显示。
|
ASurfaceTransactionStats_getASurfaceControls(ASurfaceTransactionStats *_Nonnull surface_transaction_stats, ASurfaceControl *_Nullable *_Nullable *_Nonnull outASurfaceControls, size_t *_Nonnull outASurfaceControlsSize)
|
void
outASurfaceControls 返回在事务期间更新的 ASurfaceControl 指针数组。
|
ASurfaceTransactionStats_getAcquireTime(ASurfaceTransactionStats *_Nonnull surface_transaction_stats, ASurfaceControl *_Nonnull surface_control)
|
int64_t
返回 CURRENT 缓冲区获取时的时间戳。 |
ASurfaceTransactionStats_getLatchTime(ASurfaceTransactionStats *_Nonnull surface_transaction_stats)
|
int64_t
返回框架锁定帧时的时间戳。
|
ASurfaceTransactionStats_getPresentFenceFd(ASurfaceTransactionStats *_Nonnull surface_transaction_stats)
|
int
返回一个同步栅栏,该栅栏在事务呈现时发出信号。
|
ASurfaceTransactionStats_getPreviousReleaseFenceFd(ASurfaceTransactionStats *_Nonnull surface_transaction_stats, ASurfaceControl *_Nonnull surface_control)
|
int
返回用于指示在此 surface 上设置的 PREVIOUS 缓冲区已释放的栅栏。
|
ASurfaceTransactionStats_releaseASurfaceControls(ASurfaceControl *_Nonnull *_Nonnull surface_controls)
|
void
释放由 ASurfaceTransactionStats_getASurfaceControls() 返回的 ASurfaceControl 数组。
|
ASurfaceTransaction_apply(ASurfaceTransaction *_Nonnull transaction)
|
void
应用在 transaction 中累积的更新。
|
ASurfaceTransaction_clearFrameRate(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control)
|
void
清除为 surface_control 设置的帧率。
|
ASurfaceTransaction_create()
|
ASurfaceTransaction *_Nonnull
调用者拥有该事务,并且必须使用下面的 ASurfaceTransaction_delete() 函数释放它。
|
ASurfaceTransaction_delete(ASurfaceTransaction *_Nullable transaction)
|
void
销毁 transaction 对象。
|
ASurfaceTransaction_fromJava(JNIEnv *_Nonnull env, jobject _Nonnull transactionObj)
|
ASurfaceTransaction *_Nonnull
返回由 Java Transaction 对象封装的 ASurfaceTransaction。
|
ASurfaceTransaction_reparent(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, ASurfaceControl *_Nullable new_parent)
|
void
将 surface_control 从其旧的父级重新指向 new_parent surface control。
|
ASurfaceTransaction_setBuffer(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, AHardwareBuffer *_Nonnull buffer, int acquire_fence_fd)
|
void
更新为 surface_control 显示的 AHardwareBuffer。
|
ASurfaceTransaction_setBufferAlpha(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float alpha)
|
void
设置缓冲区的 alpha。
|
ASurfaceTransaction_setBufferDataSpace(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, enum ADataSpace data_space)
|
void
设置 surface_control 缓冲区的色彩空间。
|
ASurfaceTransaction_setBufferTransform(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, int32_t transform)
|
void
|
ASurfaceTransaction_setBufferTransparency(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, enum ASurfaceTransactionTransparency transparency)
|
void
更新与此 surface 关联的缓冲区内容是否完全不透明。
|
ASurfaceTransaction_setBufferWithRelease(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, AHardwareBuffer *_Nonnull buffer, int acquire_fence_fd, void *_Null_unspecified context, ASurfaceTransaction_OnBufferRelease _Nonnull func)
|
void
更新为 surface_control 显示的 AHardwareBuffer。
|
ASurfaceTransaction_setColor(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float r, float g, float b, float alpha, enum ADataSpace dataspace)
|
void
更新 surface_control 的颜色。
|
ASurfaceTransaction_setCrop(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, const ARect *_Nonnull crop)
|
void
将 surface 及其子级限定到指定的边界内。
|
ASurfaceTransaction_setDamageRegion(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, const ARect *_Nullable rects, uint32_t count)
|
void
更新此事务中在此 surface 上更新的内容区域。
|
ASurfaceTransaction_setDesiredHdrHeadroom(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float desiredHeadroom)
|
void
为层设置所需的 HDR 余量。
|
ASurfaceTransaction_setDesiredPresentTime(ASurfaceTransaction *_Nonnull transaction, int64_t desiredPresentTime)
|
void
为此事务指定 desiredPresentTime。
|
ASurfaceTransaction_setEnableBackPressure(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, bool enableBackPressure)
|
void
指示是否启用对提交到给定 SurfaceControl 的缓冲区的背压(backpressure)。
|
ASurfaceTransaction_setExtendedRangeBrightness(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float currentBufferRatio, float desiredRatio)
|
void
为层设置所需的扩展范围亮度。
|
ASurfaceTransaction_setFrameRate(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float frameRate, int8_t compatibility)
|
void
与 ASurfaceTransaction_setFrameRateWithChangeStrategy(transaction, 0, compatibility, changeFrameRateStrategy) 相同。
|
ASurfaceTransaction_setFrameRateWithChangeStrategy(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float frameRate, int8_t compatibility, int8_t changeFrameRateStrategy)
|
void
为 surface_control 设置预期帧率。
|
ASurfaceTransaction_setFrameTimeline(ASurfaceTransaction *_Nonnull transaction, AVsyncId vsyncId)
|
void
设置在 SurfaceFlinger 中使用的帧时间轴。
|
ASurfaceTransaction_setGeometry(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, const ARect *_Nonnull source, const ARect *_Nonnull destination, int32_t transform)
|
void
|
ASurfaceTransaction_setHdrMetadata_cta861_3(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, struct AHdrMetadata_cta861_3 *_Nullable metadata)
|
void
在 surface 上设置 CTA 861.3“HDR Static Metadata Extension”静态元数据。
|
ASurfaceTransaction_setHdrMetadata_smpte2086(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, struct AHdrMetadata_smpte2086 *_Nullable metadata)
|
void
SMPTE ST 2086“Mastering Display Color Volume”静态元数据。
|
ASurfaceTransaction_setOnCommit(ASurfaceTransaction *_Nonnull transaction, void *_Null_unspecified context, ASurfaceTransaction_OnCommit _Nonnull func)
|
void
设置回调,该回调在应用此事务中的更新并准备好呈现时被调用。
|
ASurfaceTransaction_setOnComplete(ASurfaceTransaction *_Nonnull transaction, void *_Null_unspecified context, ASurfaceTransaction_OnComplete _Nonnull func)
|
void
设置回调,该回调在呈现此事务中的更新时被调用。
|
ASurfaceTransaction_setPosition(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, int32_t x, int32_t y)
|
void
指定 surface 在父级空间中绘制的位置。
|
ASurfaceTransaction_setScale(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float xScale, float yScale)
|
void
以 (0, 0) 为缩放中心点,设置 surface 的 x 和 y 缩放比例。
|
ASurfaceTransaction_setVisibility(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, enum ASurfaceTransactionVisibility visibility)
|
void
更新 surface_control 的可见性。
|
ASurfaceTransaction_setZOrder(ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, int32_t z_order)
|
void
更新 surface_control 的 z 顺序索引。
|
结构体 |
|
---|---|
ANativeActivity |
此结构定义 android.app.NativeActivity 的原生端。 |
ANativeActivityCallbacks |
这些是框架对原生应用进行的回调。 |
ARect |
矩形窗口区域。 |
枚举
匿名枚举 107
在android/window.h
中声明
Anonymous Enum 107
窗口标志,如同 Java API 中的 android.view.WindowManager.LayoutParams。
属性 | |
---|---|
AWINDOW_FLAG_ALLOW_LOCK_WHILE_SCREEN_ON |
只要此窗口对用户可见,就允许在屏幕开启时激活锁定屏幕。 此标志可以独立使用,也可以与 AWINDOW_FLAG_KEEP_SCREEN_ON 和/或 AWINDOW_FLAG_SHOW_WHEN_LOCKED 结合使用。 |
AWINDOW_FLAG_ALT_FOCUSABLE_IM |
根据此窗口与当前方法的互动方式,反转 AWINDOW_FLAG_NOT_FOCUSABLE 的状态。 也就是说,如果设置了 FLAG_NOT_FOCUSABLE 且也设置了此标志,则窗口将表现为需要与输入法互动,并因此被放置在其后/远离它;如果未设置 AWINDOW_FLAG_NOT_FOCUSABLE 且设置了此标志,则窗口将表现为不需要与输入法互动,并且可以被放置以使用更多空间并覆盖输入法。 |
AWINDOW_FLAG_BLUR_BEHIND |
模糊此窗口后面的所有内容。 已弃用。 不再支持模糊效果。 |
AWINDOW_FLAG_DIM_BEHIND |
此窗口后面的所有内容都将变暗。 |
AWINDOW_FLAG_DISMISS_KEYGUARD |
设置后,只有在不是安全锁定屏幕的情况下,该窗口才会导致锁定屏幕被解除。 由于这种锁定屏幕不需要安全性,因此如果用户导航到另一个窗口,它将永远不会重新出现(与 AWINDOW_FLAG_SHOW_WHEN_LOCKED 不同,后者只会暂时隐藏安全和非安全锁定屏幕,但确保当用户移动到不会隐藏它们的另一个界面时它们会重新出现)。如果当前锁定屏幕处于活动状态且是安全的(需要解锁模式),则用户仍然需要在看到此窗口之前确认它,除非也设置了 AWINDOW_FLAG_SHOW_WHEN_LOCKED。 |
AWINDOW_FLAG_DITHER |
将此窗口合成到屏幕时启用抖动。 已弃用。 此标志不再使用。 |
AWINDOW_FLAG_FORCE_NOT_FULLSCREEN |
覆盖 AWINDOW_FLAG_FULLSCREEN 并强制显示屏幕装饰(例如状态栏)。 |
AWINDOW_FLAG_FULLSCREEN |
显示此窗口时隐藏所有屏幕装饰(例如状态栏)。 这允许窗口使用整个显示空间;当设置此标志的应用窗口位于顶层时,状态栏将被隐藏。全屏窗口将忽略 SOFT_INPUT_ADJUST_RESIZE 的值;窗口将保持全屏且不会调整大小。 |
AWINDOW_FLAG_IGNORE_CHEEK_PRESSES |
旨在用于用户经常将屏幕贴近脸部时使用的窗口,它将积极过滤事件流,以防止在这种情况下可能不希望特定窗口发生的意外按下;当检测到此类事件流时,应用将收到一个 AMOTION_EVENT_ACTION_CANCEL 来指示此情况,以便应用可以相应地处理,直到手指释放之前不对事件采取任何操作。 |
AWINDOW_FLAG_KEEP_SCREEN_ON |
只要此窗口对用户可见,就保持设备的屏幕开启并高亮度。 |
AWINDOW_FLAG_LAYOUT_INSET_DECOR |
仅与 AWINDOW_FLAG_LAYOUT_IN_SCREEN 结合使用的特殊选项。 在请求屏幕内布局时,您的窗口可能会显示在屏幕装饰(例如状态栏)上方或下方。通过同时包含此标志,窗口管理器将报告所需的插入矩形,以确保您的内容不被屏幕装饰覆盖。 |
AWINDOW_FLAG_LAYOUT_IN_SCREEN |
将窗口放置在整个屏幕内,忽略边界周围的装饰(例如状态栏)。 窗口必须正确放置其内容,以考虑屏幕装饰。 |
AWINDOW_FLAG_LAYOUT_NO_LIMITS |
允许窗口扩展到屏幕外。 |
AWINDOW_FLAG_NOT_FOCUSABLE |
此窗口永远不会获得按键输入焦点,因此用户无法向其发送按键或其他按钮事件。 这些事件将转到其后面的任何可获得焦点的窗口。无论是否明确设置了 AWINDOW_FLAG_NOT_TOUCH_MODAL,此标志也将启用它。 设置此标志还意味着窗口不需要与软输入法互动,因此其 Z 轴顺序和位置将独立于任何活动的输入法(通常这意味着它在输入法上方以 Z 轴排序,因此它可以将其内容全屏显示并在需要时覆盖输入法。您可以使用 AWINDOW_FLAG_ALT_FOCUSABLE_IM 修改此行为。 |
AWINDOW_FLAG_NOT_TOUCHABLE |
此窗口永远不能接收触控事件。 |
AWINDOW_FLAG_NOT_TOUCH_MODAL |
即使此窗口可获得焦点(其 AWINDOW_FLAG_NOT_FOCUSABLE 未设置),也允许将窗口外的任何指针事件发送到其后面的窗口。 否则,它将自行消耗所有指针事件,无论它们是否在窗口内。 |
AWINDOW_FLAG_SCALED |
一种特殊模式,其中布局参数用于在将 surface 合成到屏幕时对其进行缩放。 |
AWINDOW_FLAG_SECURE |
将窗口内容视为安全内容,防止其出现在屏幕截图中或在非安全显示器上查看。 |
AWINDOW_FLAG_SHOW_WALLPAPER |
请求在您的窗口后面显示系统壁纸。 窗口 surface 必须是半透明的才能真正看到后面的壁纸;此标志仅确保如果此窗口确实具有半透明区域,则壁纸 surface 会存在。 |
AWINDOW_FLAG_SHOW_WHEN_LOCKED |
屏幕锁定时允许显示窗口的特殊标志。 这将使应用窗口优先于锁定屏幕或任何其他锁屏。可与 AWINDOW_FLAG_KEEP_SCREEN_ON 结合使用,以打开屏幕并在显示锁定屏幕窗口之前直接显示窗口。可与 AWINDOW_FLAG_DISMISS_KEYGUARD 结合使用,以自动完全解除非安全锁定屏幕。此标志仅适用于最顶层的全屏窗口。 |
AWINDOW_FLAG_TOUCHABLE_WHEN_WAKING |
设置后,如果在触摸屏按下时设备处于睡眠状态,您将收到此首次触控事件。 通常,由于用户看不到他们在按什么,首次触控事件会被系统消耗。 已弃用。 此标志无效。 |
AWINDOW_FLAG_TURN_SCREEN_ON |
当窗口被添加或可见时设置此标志,一旦窗口显示,系统将触发电源管理器的用户活动(如同用户唤醒了设备),以打开屏幕。 |
AWINDOW_FLAG_WATCH_OUTSIDE_TOUCH |
如果您已设置 AWINDOW_FLAG_NOT_TOUCH_MODAL,您可以设置此标志以接收一个特殊的 MotionEvent,其 action 为 AMOTION_EVENT_ACTION_OUTSIDE,用于在窗口外部发生的触控事件。 请注意,您不会收到完整的按下/移动/抬起手势,只会收到作为 AMOTION_EVENT_ACTION_OUTSIDE 的首次按下的位置。 |
匿名枚举 51
在android/native_activity.h
中声明
Anonymous Enum 51
ANativeActivity_showSoftInput 的标志;请参阅 Java InputMethodManager API 以获取文档。
属性 | |
---|---|
ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED |
用户已强制打开输入法(例如通过长按菜单),因此在用户明确关闭之前,不应关闭输入法。 |
ANATIVEACTIVITY_SHOW_SOFT_INPUT_IMPLICIT |
隐式请求显示输入窗口,而不是用户直接请求的结果。 |
匿名枚举 52
在android/native_activity.h
中声明
Anonymous Enum 52
ANativeActivity_hideSoftInput 的标志;请参阅 Java InputMethodManager API 以获取文档。
属性 | |
---|---|
ANATIVEACTIVITY_HIDE_SOFT_INPUT_IMPLICIT_ONLY |
软输入窗口仅应在不是用户明确显示的情况下被隐藏。 |
ANATIVEACTIVITY_HIDE_SOFT_INPUT_NOT_ALWAYS |
软输入窗口通常应被隐藏,除非最初是使用 ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED 显示的。 |
ASurfaceTransactionTransparency
在android/surface_control.h
中声明
ASurfaceTransactionTransparency
ASurfaceTransactionVisibility
在android/surface_control.h
中声明
ASurfaceTransactionVisibility
类型定义
AInputReceiver
在android/surface_control_input_receiver.h
中声明
struct AInputReceiver AInputReceiver
保存对已注册输入通道引用的 InputReceiver。
必须使用 AInputReceiver_release 释放此对象
AInputReceiverCallbacks
在android/surface_control_input_receiver.h
中声明
struct AInputReceiverCallbacks AInputReceiverCallbacks
AInputReceiver_onKeyEvent
在android/surface_control_input_receiver.h
中声明
bool(* AInputReceiver_onKeyEvent)(void *_Null_unspecified context, AInputEvent *_Nonnull keyEvent)
当已注册的输入通道收到按键事件时,会调用 AInputReceiver_onKeyEvent 回调。
自 API 级别 35 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AInputReceiver_onMotionEvent
在android/surface_control_input_receiver.h
中声明
bool(* AInputReceiver_onMotionEvent)(void *_Null_unspecified context, AInputEvent *_Nonnull motionEvent)
当已注册的输入通道收到运动事件时,会调用 AInputReceiver_onMotionEvent 回调。
自 API 级别 35 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AInputTransferToken
在android/input_transfer_token_jni.h
中声明
struct AInputTransferToken AInputTransferToken
AInputTransferToken 可用于请求焦点或在嵌入式 SurfaceControl 之间转移触控手势。
ANativeActivity
在android/native_activity.h
中声明
struct ANativeActivity ANativeActivity
此结构定义 android.app.NativeActivity 的原生端。
它由框架创建,并在应用的原生代码启动时传递给它。
ANativeActivityCallbacks
在android/native_activity.h
中声明
struct ANativeActivityCallbacks ANativeActivityCallbacks
这些是框架对原生应用进行的回调。
所有这些回调都在应用的主线程上发生。默认情况下,所有回调均为 NULL;设置为指向您自己的函数以使其被调用。
ANativeActivity_createFunc
在android/native_activity.h
中声明
void ANativeActivity_createFunc(ANativeActivity *activity, void *savedState, size_t savedStateSize)
这是必须位于原生代码中用于实例化应用原生 activity 的函数。
它与 activity 实例一起被调用(参见上文);如果代码是从之前保存的实例中实例化的,则 savedState 将非 NULL 并指向保存的数据。您必须复制您需要的任何此数据,它将在您从此函数返回后被释放。
ARect
在android/rect.h
中声明
struct ARect ARect
矩形窗口区域。
这是 Java 中 android.graphics.Rect 类的 NDK 等效项。它与 ANativeActivityCallbacks::onContentRectChanged 事件回调和 ANativeWindow_lock() 函数一起使用。
在有效的 ARect 中,left <= right 且 top <= bottom。ARect (left=0, top=10, right=1, bottom=11) 只包含一个像素,位于 x=0, y=10。
ASurfaceControl
在android/surface_control.h
中声明
struct ASurfaceControl ASurfaceControl
SurfaceControl API 可用于提供 surface 层次结构,以便与系统合成器进行合成。
ASurfaceControl 代表此层次结构中的一个内容节点。
ASurfaceTransaction
在android/surface_control.h
中声明
struct ASurfaceTransaction ASurfaceTransaction
ASurfaceTransaction 是必须原子化应用的 surface 树更新集合。
ASurfaceTransactionStats
在android/surface_control.h
中声明
struct ASurfaceTransactionStats ASurfaceTransactionStats
回调期间返回的不透明句柄,可用于查询一般统计信息,以及查询在此事务应用后被移除或缓冲区已更新的 surface 的统计信息。
ASurfaceTransaction_OnBufferRelease
在android/surface_control.h
中声明
void(* ASurfaceTransaction_OnBufferRelease)(void *_Null_unspecified context, int release_fence_fd)
当通过 ASurfaceTransaction_setBuffer 传入的缓冲区可供重复使用时,会调用 ASurfaceTransaction_OnBufferRelease 回调。
如果调用 ASurfaceTransaction_setBuffer 时传入非空缓冲区,则保证调用此回调。如果事务中的缓冲区通过另一次调用 ASurfaceTransaction_setBuffer 被替换,则会立即调用回调。否则,回调将在缓冲区呈现后、ASurfaceTransaction_OnComplete 回调之前被调用。
如果设置了此回调,调用者不应使用 ASurfaceTransaction_OnComplete 释放缓冲区。
线程:回调可以在任何线程上调用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
自 API 级别 36 起可用。
ASurfaceTransaction_OnCommit
在android/surface_control.h
中声明
void(* ASurfaceTransaction_OnCommit)(void *_Null_unspecified context, ASurfaceTransactionStats *_Nonnull stats)
当事务应用且更新准备好呈现时,会调用 ASurfaceTransaction_OnCommit 回调。
此回调将在 ASurfaceTransaction_OnComplete 回调之前被调用。
此回调并不意味着缓冲区已释放!它仅表示任何新应用的事务都不会覆盖我们正在接收回调的事务,而是将包含在下一帧中。如果您正在尝试避免丢帧(覆盖事务),并且无法使用时间戳(提供更有效的解决方案),则此方法提供了一种调整事务应用速度的方法。
线程:事务提交回调可以在任何线程上调用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
自 API 级别 31 起可用。
ASurfaceTransaction_OnComplete
在android/surface_control.h
中声明
void(* ASurfaceTransaction_OnComplete)(void *_Null_unspecified context, ASurfaceTransactionStats *_Nonnull stats)
由于事务是异步应用的,因此可以使用 ASurfaceTransaction_OnComplete 回调来在呈现包含事务中更新的帧时收到通知。
在此回调调用的事务中被替换或从场景中移除的缓冲区在此之后可以重复使用。
从 API 级别 36 开始,首选使用 ASurfaceTransaction_OnBufferRelease 来监听缓冲区何时可供重复使用。
线程:事务完成回调可以在任何线程上调用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
自 API 级别 29 起可用。
变量
ANativeActivity_onCreate
在android/native_activity.h
中声明
ANativeActivity_createFunc ANativeActivity_onCreate
NativeInstance 在启动其原生代码时查找的函数名称。
这是使用的默认函数,您可以在您的 manifest 中指定“android.app.func_name”字符串元数据以使用不同的函数。
函数
AInputReceiverCallbacks_create
在android/surface_control_input_receiver.h
中声明
AInputReceiverCallbacks *_Nonnull AInputReceiverCallbacks_create( void *_Nullable context )
创建 AInputReceiverCallbacks 对象,该对象在注册 AInputReceiver 时使用。
必须使用 AInputReceiverCallbacks_release 释放此对象
自 API 级别 35 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
AInputReceiverCallbacks_release
在android/surface_control_input_receiver.h
中声明
void AInputReceiverCallbacks_release( AInputReceiverCallbacks *_Nullable callbacks )
释放 AInputReceiverCallbacks。
必须在创建 AInputReceiver 的同一 looper 线程上调用此函数。释放后,接收器将不再调用任何回调。
自 API 级别 35 起可用
AInputReceiverCallbacks_setKeyEventCallback
在android/surface_control_input_receiver.h
中声明
void AInputReceiverCallbacks_setKeyEventCallback( AInputReceiverCallbacks *_Nonnull callbacks, AInputReceiver_onKeyEvent _Nonnull onKeyEvent )
为 AInputReceiverCallbacks 设置 AInputReceiver_onKeyEvent 回调。
自 API 级别 35 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AInputReceiverCallbacks_setMotionEventCallback
在android/surface_control_input_receiver.h
中声明
void AInputReceiverCallbacks_setMotionEventCallback( AInputReceiverCallbacks *_Nonnull callbacks, AInputReceiver_onMotionEvent _Nonnull onMotionEvent )
为 AInputReceiverCallbacks 设置 AInputReceiver_onMotionEvent 回调。
自 API 级别 35 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AInputReceiver_createBatchedInputReceiver
在android/surface_control_input_receiver.h
中声明
AInputReceiver *_Nonnull AInputReceiver_createBatchedInputReceiver( AChoreographer *_Nonnull aChoreographer, const AInputTransferToken *_Nonnull hostInputTransferToken, const ASurfaceControl *_Nonnull aSurfaceControl, AInputReceiverCallbacks *_Nonnull aInputReceiverCallbacks )
为 ASurfaceControl 注册输入接收器,该接收器将接收批量输入事件。
对于那些被批处理的事件,将在每个 AChoreographer 帧中调用一次,而其他输入事件将立即传递。
这与 AInputReceiver_createUnbatchedInputReceiver 不同之处在于输入事件是批量接收的。当不再需要使用输入接收器时,调用者必须调用 AInputReceiver_release 来清理资源。
返回 AInputReceiver 的引用,以便在完成后清理资源。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
自 API 级别 35 起可用。
AInputReceiver_createUnbatchedInputReceiver
在android/surface_control_input_receiver.h
中声明
AInputReceiver *_Nonnull AInputReceiver_createUnbatchedInputReceiver( ALooper *_Nonnull aLooper, const AInputTransferToken *_Nonnull hostInputTransferToken, const ASurfaceControl *_Nonnull aSurfaceControl, AInputReceiverCallbacks *_Nonnull aInputReceiverCallbacks )
为 ASurfaceControl 注册输入接收器,该接收器将接收每个输入事件。
这与 AInputReceiver_createBatchedInputReceiver 不同之处在于输入事件是未批量接收的。当不再需要使用输入接收器时,调用者必须调用 AInputReceiver_release 来清理资源。
返回 AInputReceiver 的引用,以便在完成后清理资源。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
自 API 级别 35 起可用。
AInputReceiver_getInputTransferToken
在android/surface_control_input_receiver.h
中声明
const AInputTransferToken *_Nonnull AInputReceiver_getInputTransferToken( AInputReceiver *_Nonnull aInputReceiver )
返回 AInputTransferToken,该 token 可用于在其他窗口之间转移触控手势。
此 InputTransferToken 与注册了输入接收器的 SurfaceControl 相关联,并且可以与主机 token 一起用于通过 WindowManager::transferTouchGesture() 等方式转移触控手势。
必须使用 AInputTransferToken_release 释放此对象。
自 API 级别 35 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
AInputReceiver_release
在android/surface_control_input_receiver.h
中声明
void AInputReceiver_release( AInputReceiver *_Nullable aInputReceiver )
注销输入通道并删除 AInputReceiver。
必须在创建它的同一 looper 线程上调用此函数。
自 API 级别 35 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
AInputTransferToken_fromJava
在android/input_transfer_token_jni.h
中声明
AInputTransferToken *_Nonnull AInputTransferToken_fromJava( JNIEnv *_Nonnull env, jobject _Nonnull inputTransferTokenObj )
返回由 Java InputTransferToken 对象封装的 AInputTransferToken。
必须使用 AInputTransferToken_release 释放此对象
inputTransferTokenObj 必须是 android.window.InputTransferToken 的非空实例。
自 API 级别 35 起可用。
AInputTransferToken_release
在android/input_transfer_token_jni.h
中声明
void AInputTransferToken_release( AInputTransferToken *_Nullable aInputTransferToken )
移除先前在原生代码中获取的引用。
自 API 级别 35 起可用。
AInputTransferToken_toJava
在android/input_transfer_token_jni.h
中声明
jobject _Nonnull AInputTransferToken_toJava( JNIEnv *_Nonnull env, const AInputTransferToken *_Nonnull aInputTransferToken )
返回封装 AInputTransferToken 的 Java InputTransferToken 对象。
aInputTransferToken 必须非空,返回的值是 android.window.InputTransferToken 的实例对象。
自 API 级别 35 起可用。
ANativeActivity_finish
在android/native_activity.h
中声明
void ANativeActivity_finish( ANativeActivity *activity )
结束给定的 activity。
将调用其 finish() 方法,导致其停止并销毁。请注意,此方法可以从任何线程调用;它将向进程的主线程发送消息,在该主线程中将执行 Java finish 调用。
ANativeActivity_hideSoftInput
在android/native_activity.h
中声明
void ANativeActivity_hideSoftInput( ANativeActivity *activity, uint32_t flags )
在给定 activity 中隐藏 IME(输入法编辑器)。
为给定 activity 调用 InputMethodManager.hideSoftInput()。请注意,此方法可以从任何线程调用;它将向进程的主线程发送消息,在该主线程中将执行 Java finish 调用。
ANativeActivity_setWindowFlags
在android/native_activity.h
中声明
void ANativeActivity_setWindowFlags( ANativeActivity *activity, uint32_t addFlags, uint32_t removeFlags )
更改给定 activity 的窗口标志。
调用给定 activity 的 getWindow().setFlags()。请注意,此方法可以从任何线程调用;它将向进程的主线程发送消息,在该主线程中将执行 Java finish 调用。请参阅 window.h 以获取标志常量。
ANativeActivity_setWindowFormat
在android/native_activity.h
中声明
void ANativeActivity_setWindowFormat( ANativeActivity *activity, int32_t format )
更改给定 activity 的窗口格式。
调用给定 activity 的 getWindow().setFormat()。请注意,此方法可以从任何线程调用;它将向进程的主线程发送消息,在该主线程中将执行 Java finish 调用。
ANativeActivity_showSoftInput
在android/native_activity.h
中声明
void ANativeActivity_showSoftInput( ANativeActivity *activity, uint32_t flags )
在给定 activity 中显示 IME(输入法编辑器)。
为给定 activity 调用 InputMethodManager.showSoftInput()。请注意,此方法可以从任何线程调用;它将向进程的主线程发送消息,在该主线程中将执行 Java finish 调用。
ANativeWindow_fromSurface
在android/native_window_jni.h
中声明
ANativeWindow * ANativeWindow_fromSurface( JNIEnv *env, jobject surface )
返回与 Java Surface 对象关联的 ANativeWindow,以便通过原生代码与其互动。
这将获取返回的 ANativeWindow 的引用;请务必在使用完毕后使用 ANativeWindow_release() 释放它,以免内存泄漏。
ANativeWindow_toSurface
在android/native_window_jni.h
中声明
jobject ANativeWindow_toSurface( JNIEnv *env, ANativeWindow *window )
返回派生自 ANativeWindow 的 Java Surface 对象,以便通过 Java 代码与其互动。
返回的 Java 对象会获取 ANativeWindow 的引用;在一般的 Java 对象生命周期内维护此引用;并在 Java 对象被垃圾回收时自动释放引用。
自 API 级别 26 起可用。
ASurfaceControl_acquire
在android/surface_control.h
中声明
void ASurfaceControl_acquire( ASurfaceControl *_Nonnull surface_control )
获取给定 ASurfaceControl 对象的引用。
这会阻止对象被删除,直到引用被移除。
要释放引用,请使用 ASurfaceControl_release 函数。
自 API 级别 31 起可用。
ASurfaceControl_create
在android/surface_control.h
中声明
ASurfaceControl *_Nullable ASurfaceControl_create( ASurfaceControl *_Nonnull parent, const char *_Nonnull debug_name )
请参阅 ASurfaceControl_createFromWindow。
自 API 级别 29 起可用。
ASurfaceControl_createFromWindow
在android/surface_control.h
中声明
ASurfaceControl *_Nullable ASurfaceControl_createFromWindow( ANativeWindow *_Nonnull parent, const char *_Nonnull debug_name )
创建以 ANativeWindow 或 ASurfaceControl 作为其父级的 ASurfaceControl。
debug_name 是与此 surface 关联的调试名称。它可用于在 SurfaceFlinger 的层树中标识此 surface。它不能为 null。
调用者拥有返回的 ASurfaceControl 的所有权,并且必须使用下面的 ASurfaceControl_release 释放它。
默认情况下,ASurfaceControl 将可见并显示任何提交的缓冲区。此外,默认的缓冲区提交控制可能会释放并且不显示在收到前一个缓冲区的回调之前提交的所有缓冲区。请参阅 ASurfaceTransaction_setVisibility 和 ASurfaceTransaction_setEnableBackPressure 以更改创建后的默认行为。
自 API 级别 29 起可用。
ASurfaceControl_fromJava
在android/surface_control_jni.h
中声明
ASurfaceControl *_Nonnull ASurfaceControl_fromJava( JNIEnv *_Nonnull env, jobject _Nonnull surfaceControlObj )
返回由 Java SurfaceControl 对象封装的 ASurfaceControl。
调用者拥有返回的 ASurfaceControl 的所有权,并且必须使用 ASurfaceControl_release 释放它 * 。
surfaceControlObj 必须是 android.view.SurfaceControl 的非空实例,且 isValid() 必须为 true。
自 API 级别 34 起可用。
ASurfaceControl_release
在android/surface_control.h
中声明
void ASurfaceControl_release( ASurfaceControl *_Nonnull surface_control )
移除先前通过以下任一函数获取的引用:ASurfaceControl_createFromWindow、ASurfaceControl_create、ANativeWindow_acquire。只要其父级仍显示,surface 及其子级就可能仍显示。
自 API 级别 29 起可用。
ASurfaceTransactionStats_getASurfaceControls
在android/surface_control.h
中声明
void ASurfaceTransactionStats_getASurfaceControls( ASurfaceTransactionStats *_Nonnull surface_transaction_stats, ASurfaceControl *_Nullable *_Nullable *_Nonnull outASurfaceControls, size_t *_Nonnull outASurfaceControlsSize )
outASurfaceControls 返回在事务期间更新的 ASurfaceControl 指针数组。
可以通过 ASurfaceTransactionStats 函数查询 surface 的统计信息。客户端使用完数组后,必须通过调用 ASurfaceTransactionStats_releaseASurfaceControls 释放它。
自 API 级别 29 起可用。
outASurfaceControlsSize 返回 ASurfaceControls 数组的大小。
ASurfaceTransactionStats_getAcquireTime
在android/surface_control.h
中声明
int64_t ASurfaceTransactionStats_getAcquireTime( ASurfaceTransactionStats *_Nonnull surface_transaction_stats, ASurfaceControl *_Nonnull surface_control )
返回 CURRENT 缓冲区获取时的时间戳。
当缓冲区的 acquire_fence_fd 发出信号时,该缓冲区被认为是已获取的。在获取之前,缓冲区无法被锁定或呈现。如果未提供 acquire_fence_fd,此时间戳将设置为 -1。
自 API 级别 29 起可用。
已弃用。 这可能会返回 SIGNAL_PENDING,因为统计信息可能在获取栅栏发出信号之前到达,具体取决于内部时序差异。因此,调用者应使用传入 setBuffer 中的获取栅栏并查询信号时间。
ASurfaceTransactionStats_getLatchTime
在android/surface_control.h
中声明
int64_t ASurfaceTransactionStats_getLatchTime( ASurfaceTransactionStats *_Nonnull surface_transaction_stats )
返回框架锁定帧时的时间戳。
一旦帧被框架锁定,它将在随后的硬件垂直同步时呈现。
自 API 级别 29 起可用。
ASurfaceTransactionStats_getPresentFenceFd
在android/surface_control.h
中声明
int ASurfaceTransactionStats_getPresentFenceFd( ASurfaceTransactionStats *_Nonnull surface_transaction_stats )
返回一个同步栅栏,该栅栏在事务呈现时发出信号。
回调的接收方拥有栅栏的所有权,并负责关闭它。如果设备不支持 present 栅栏,则返回 -1。
此查询对于 ASurfaceTransaction_OnCommit 回调无效。
自 API 级别 29 起可用。
ASurfaceTransactionStats_getPreviousReleaseFenceFd
在android/surface_control.h
中声明
int ASurfaceTransactionStats_getPreviousReleaseFenceFd( ASurfaceTransactionStats *_Nonnull surface_transaction_stats, ASurfaceControl *_Nonnull surface_control )
返回用于指示在此 surface 上设置的 PREVIOUS 缓冲区已释放的栅栏。
如果此栅栏有效 (>=0),则 PREVIOUS 缓冲区尚未释放,栅栏将在 PREVIOUS 缓冲区释放时发出信号。如果栅栏为 -1,则 PREVIOUS 缓冲区已释放。回调的接收方拥有 previousReleaseFenceFd 的所有权,并负责关闭它。
每次通过 ASurfaceTransaction_setBuffer() 在应用的事务上设置缓冲区时,框架会获取此缓冲区的引用。框架将缓冲区添加到特定 surface 的操作视为一个唯一的引用。当事务更新或从 surface 移除缓冲区,或从树中移除 surface 本身时,保证在此事务的 OnComplete 回调中释放此引用。为此 surface 在回调中提供的 ASurfaceControlStats 可能包含一个可选的栅栏,必须在假定释放引用之前发出信号。
客户端必须确保在尝试重复使用此缓冲区之前释放缓冲区上的所有待处理引用,否则可能会发生同步错误。
此查询对于 ASurfaceTransaction_OnCommit 回调无效。
自 API 级别 29 起可用。
ASurfaceTransactionStats_releaseASurfaceControls
在android/surface_control.h
中声明
void ASurfaceTransactionStats_releaseASurfaceControls( ASurfaceControl *_Nonnull *_Nonnull surface_controls )
释放由 ASurfaceTransactionStats_getASurfaceControls() 返回的 ASurfaceControl 数组。
自 API 级别 29 起可用。
ASurfaceTransaction_apply
在android/surface_control.h
中声明
void ASurfaceTransaction_apply( ASurfaceTransaction *_Nonnull transaction )
应用在 transaction 中累积的更新。
请注意,保证事务是原子化应用的。在同一线程上应用的事务也保证按顺序应用。
自 API 级别 29 起可用。
ASurfaceTransaction_clearFrameRate
在android/surface_control.h
中声明
void ASurfaceTransaction_clearFrameRate( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control )
清除为 surface_control 设置的帧率。
这等效于调用 ASurfaceTransaction_setFrameRateWithChangeStrategy( transaction, 0, compatibility, changeFrameRateStrategy)。
使用此 API 不会直接影响应用的帧生成流水线。但是,由于系统可能会更改显示刷新率,调用此函数可能会导致 Choreographer 回调时序发生变化,以及系统将缓冲区释放回应用的时间间隔发生变化。
请参阅 ASurfaceTransaction_setFrameRateWithChangeStrategy()
您可以使用 AChoreographer_registerRefreshRateCallback 注册刷新率的变化。
请参阅 ASurfaceTransaction_setFrameRateWithChangeStrategy()。
自 API 级别 34 起可用。
ASurfaceTransaction_create
在android/surface_control.h
中声明
ASurfaceTransaction *_Nonnull ASurfaceTransaction_create()
调用者拥有该事务,并且必须使用下面的 ASurfaceTransaction_delete() 函数释放它。
自 API 级别 29 起可用。
ASurfaceTransaction_delete
在android/surface_control.h
中声明
void ASurfaceTransaction_delete( ASurfaceTransaction *_Nullable transaction )
销毁 transaction 对象。
自 API 级别 29 起可用。
ASurfaceTransaction_fromJava
在android/surface_control_jni.h
中声明
ASurfaceTransaction *_Nonnull ASurfaceTransaction_fromJava( JNIEnv *_Nonnull env, jobject _Nonnull transactionObj )
返回由 Java Transaction 对象封装的 ASurfaceTransaction。
返回的 ASurfaceTransaction 仍然由 Java Transaction 对象拥有,并且仅在 Java Transaction 对象存活期间有效。特别是,返回的事务不得使用 ASurfaceTransaction_delete 删除。
transactionObj 必须是 android.view.SurfaceControl.Transaction 的非空实例,并且不得已调用 close()。
自 API 级别 34 起可用。
ASurfaceTransaction_reparent
在android/surface_control.h
中声明
void ASurfaceTransaction_reparent( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, ASurfaceControl *_Nullable new_parent )
将 surface_control 从其旧的父级重新指向 new_parent surface control。
重新指向父级的 surface_control 的任何子级将仍为 surface_control 的子级。
new_parent 可以为 null。父级为 null 的 Surface control 不会显示在显示屏上。
自 API 级别 29 起可用。
ASurfaceTransaction_setBuffer
在android/surface_control.h
中声明
void ASurfaceTransaction_setBuffer( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, AHardwareBuffer *_Nonnull buffer, int acquire_fence_fd )
更新为 surface_control 显示的 AHardwareBuffer。
如果不是 -1,acquire_fence_fd 应该是一个文件描述符,当缓冲区的所有待处理工作完成且缓冲区可以安全读取时,该文件描述符会发出信号。
框架拥有传入的 acquire_fence_fd 的所有权,并负责关闭它。
请注意,缓冲区必须使用 AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE 分配,因为 surface control 可能会使用 GPU 进行合成。
从 API 级别 36 开始,首选使用 ASurfaceTransaction_setBufferWithRelease 来设置缓冲区和一个回调,该回调将在缓冲区可供重复使用时被调用。
自 API 级别 29 起可用。
ASurfaceTransaction_setBufferAlpha
在android/surface_control.h
中声明
void ASurfaceTransaction_setBufferAlpha( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float alpha )
设置缓冲区的 alpha。
它使用预乘混合(premultiplied blending)。
alpha 必须在 0.0 到 1.0 之间。
自 API 级别 29 起可用。
ASurfaceTransaction_setBufferDataSpace
在android/surface_control.h
中声明
void ASurfaceTransaction_setBufferDataSpace( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, enum ADataSpace data_space )
设置 surface_control 缓冲区的色彩空间。
如果未设置色彩空间,surface control 默认为 ADATASPACE_SRGB。
自 API 级别 29 起可用。
ASurfaceTransaction_setBufferTransform
在android/surface_control.h
中声明
void ASurfaceTransaction_setBufferTransform( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, int32_t transform )
自 API 级别 31 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
ASurfaceTransaction_setBufferTransparency
在android/surface_control.h
中声明
void ASurfaceTransaction_setBufferTransparency( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, enum ASurfaceTransactionTransparency transparency )
更新与此 surface 关联的缓冲区内容是否完全不透明。
如果为 true,缓冲区内的每个内容像素都必须不透明,否则可能发生视觉错误。
自 API 级别 29 起可用。
ASurfaceTransaction_setBufferWithRelease
在android/surface_control.h
中声明
void ASurfaceTransaction_setBufferWithRelease( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, AHardwareBuffer *_Nonnull buffer, int acquire_fence_fd, void *_Null_unspecified context, ASurfaceTransaction_OnBufferRelease _Nonnull func )
更新为 surface_control 显示的 AHardwareBuffer。
如果不是 -1,acquire_fence_fd 应该是一个文件描述符,当缓冲区的所有待处理工作完成且缓冲区可以安全读取时,该文件描述符会发出信号。
框架拥有传入的 acquire_fence_fd 的所有权,并负责关闭它。
请注意,缓冲区必须使用 AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE 分配,因为 surface control 可能会使用 GPU 进行合成。
当缓冲区可供重复使用时,将调用 ASurfaceTransaction_OnBufferRelease 回调。如果缓冲区为 null,则不会调用回调。
自 API 级别 36 起可用。
ASurfaceTransaction_setColor
在android/surface_control.h
中声明
void ASurfaceTransaction_setColor( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float r, float g, float b, float alpha, enum ADataSpace dataspace )
更新 surface_control 的颜色。
这将使 ASurfaceControl 的背景颜色在 surface 的透明区域中可见。颜色 r、g 和 b 必须在 dataspace 有效的范围内。dataspace 和 alpha 将是为背景颜色层设置的色彩空间和 alpha。
自 API 级别 29 起可用。
ASurfaceTransaction_setCrop
在android/surface_control.h
中声明
void ASurfaceTransaction_setCrop( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, const ARect *_Nonnull crop )
将 surface 及其子级限定到指定的边界内。
裁剪和缓冲区大小将用于确定 surface 的边界。如果未指定裁剪且 surface 没有缓冲区,则 surface 边界仅受其父边界大小的限制。
自 API 级别 31 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
ASurfaceTransaction_setDamageRegion
在android/surface_control.h
中声明
void ASurfaceTransaction_setDamageRegion( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, const ARect *_Nullable rects, uint32_t count )
更新此事务中在此 surface 上更新的内容区域。
如果未指定,则假定整个 surface 已损坏。
自 API 级别 29 起可用。
ASurfaceTransaction_setDesiredHdrHeadroom
在android/surface_control.h
中声明
void ASurfaceTransaction_setDesiredHdrHeadroom( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float desiredHeadroom )
为层设置所需的 HDR 余量。
请参阅:ASurfaceTransaction_setExtendedRangeBrightness,对于符合 HLG 或 HDR10 等 HDR 标准的格式,优先使用此 API,这些格式在生成缓冲区时不会将 HDR/SDR 比率作为一部分进行通信。
虽然请求较大的所需比率会产生最大的动态范围,但自愿减少请求的范围有助于延长电池续航时间,并且可以通过确保将更大的位深分配给使用的亮度范围来提高质量。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
默认值为 0.0f,表示系统将为此 surface control 的内容选择最佳余量。通常,这意味着 HLG/PQ 编码内容将以大于 1.0 的 HDR 余量显示。
在调用 ASurfaceTransaction_setExtendedRangeBrightness 之后调用时,desiredHeadroom 将覆盖 ASurfaceTransaction_setExtendedRangeBrightness 提供的 desiredRatio。反之,在调用 ASurfaceTransaction_setExtendedRangeBrightness 之前调用时,ASurfaceTransaction_setExtendedRangeBrightness 提供的 desiredRatio 将覆盖 desiredHeadroom。
必须是有限的 && >= 1.0f,或为 0.0f 表示没有所需的净空。
自 API 级别 35 起可用。
ASurfaceTransaction_setDesiredPresentTime
在android/surface_control.h
中声明
void ASurfaceTransaction_setDesiredPresentTime( ASurfaceTransaction *_Nonnull transaction, int64_t desiredPresentTime )
为此事务指定 desiredPresentTime。
框架将尝试在指定时间或之后呈现事务。
即使应用请求更早的呈现时间,事务也只有在其所有获取围栏都已发出信号后才会呈现。
如果较早的事务的所需呈现时间为 x,而较晚的事务的所需呈现时间在 x 之前,则较晚的事务不会抢占较早的事务。
自 API 级别 29 起可用。
ASurfaceTransaction_setEnableBackPressure
在android/surface_control.h
中声明
void ASurfaceTransaction_setEnableBackPressure( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, bool enableBackPressure )
指示是否启用对提交到给定 SurfaceControl 的缓冲区的背压(backpressure)。
默认情况下,背压是禁用的,这意味着在收到前一个缓冲区的回调之前提交缓冲区可能导致该缓冲区被“丢弃”。在您选择低延迟的情况下,这可能是期望的行为!我们已经准备好了一个新缓冲区,为什么不显示它呢?
当背压启用时,每个缓冲区都需要在其被释放并传递回调之前呈现(除非整个 SurfaceControl 被移除)。
大多数应用内部可能都有某种背压机制,例如,在开始帧 N 之前等待来自帧 N-2 的回调。在高刷新率场景中,SurfaceFlinger 完成帧 N-1(并因此释放缓冲区 N-2)与开始帧 N 之间可能没有太多时间。这意味着您的应用可能没有足够的时间在回调中做出响应。在这种情况下,使用此标志并更早地推送缓冲区以进行服务器端排队将是有利的。
自 API 级别 31 起可用。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
ASurfaceTransaction_setExtendedRangeBrightness
在android/surface_control.h
中声明
void ASurfaceTransaction_setExtendedRangeBrightness( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float currentBufferRatio, float desiredRatio )
为层设置所需的扩展范围亮度。
这仅适用于其 dataspace 设置了 RANGE_EXTENDED 的图层。请参阅:ASurfaceTransaction_setDesiredHdrHeadroom,对于在生成缓冲区时将 HDR/SDR 比率编码在内的格式,优先使用此 API。
默认值为 1.0f。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
编码自身亮度范围的传输函数,例如 HLG 或 PQ,也应将此设置为 1.0f,并转而通过诸如 CTA861_3 或 SMPTE2086 之类的元数据来传达扩展内容亮度信息。
必须是有限的 && >= 1.0f。
虽然请求较大的所需比率会产生最大的动态范围,但自愿减少请求的范围有助于延长电池续航时间,并且可以通过确保将更大的位深分配给使用的亮度范围来提高质量。
详细信息 | |||
---|---|---|---|
参数 |
|
默认值为 1.0f,表示未在使用扩展范围亮度,因此最终的 SDR 或 HDR 行为将完全由所使用的 dataspace 决定(即,通常为 SDR,但 PQ 或 HLG 传输函数仍会产生 HDR)。
在调用 ASurfaceTransaction_setDesiredHdrHeadroom 之后调用时,desiredRatio 将覆盖 ASurfaceTransaction_setDesiredHdrHeadroom 提供的 desiredHeadroom。反之,在调用 ASurfaceTransaction_setDesiredHdrHeadroom 之前调用时,ASurfaceTransaction_setDesiredHdrHeadroom 提供的 desiredHeadroom 将覆盖 desiredRatio。
Must be finite && >= 1.0f
自 API 级别 34 起可用。
ASurfaceTransaction_setFrameRate
在android/surface_control.h
中声明
void ASurfaceTransaction_setFrameRate( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float frameRate, int8_t compatibility )
与 ASurfaceTransaction_setFrameRateWithChangeStrategy(transaction, 0, compatibility, changeFrameRateStrategy) 相同。
请参阅 ASurfaceTransaction_setFrameRateWithChangeStrategy()。
自 API 级别 30 起可用。
ASurfaceTransaction_setFrameRateWithChangeStrategy
在android/surface_control.h
中声明
void ASurfaceTransaction_setFrameRateWithChangeStrategy( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float frameRate, int8_t compatibility, int8_t changeFrameRateStrategy )
为 surface_control 设置预期帧率。
在能够以不同刷新率运行显示的设备上,系统可能会选择显示刷新率以更好地匹配此图面的帧率。使用此 API 不会直接影响应用的帧生产管线。但是,由于系统可能会更改显示刷新率,调用此函数可能会导致 Choreographer 回调时序发生变化,以及系统将缓冲区释放回应用的时间间隔发生变化。
您可以使用 AChoreographer_registerRefreshRateCallback 注册刷新率的变化。
请参阅 ASurfaceTransaction_clearFrameRate()。
自 API 级别 31 起可用。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
ASurfaceTransaction_setFrameTimeline
在android/surface_control.h
中声明
void ASurfaceTransaction_setFrameTimeline( ASurfaceTransaction *_Nonnull transaction, AVsyncId vsyncId )
设置在 SurfaceFlinger 中使用的帧时间轴。
应根据应用在渲染帧时能够满足的帧截止时间以及应用的所需呈现时间来选择帧时间轴。通过设置帧时间轴,SurfaceFlinger 会尝试在相应的预期呈现时间呈现该帧。
要接收帧时间轴,必须使用 AChoreographer_postVsyncCallback() 向 Choreographer 发布回调。然后可以使用 AChoreographerFrameCallbackData_getFrameTimelineVsyncId() 从回调负载中提取 vsyncId
。
自 API 级别 33 起可用。
详细信息 | |||
---|---|---|---|
参数 |
|
ASurfaceTransaction_setGeometry
在android/surface_control.h
中声明
void ASurfaceTransaction_setGeometry( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, const ARect *_Nonnull source, const ARect *_Nonnull destination, int32_t transform )
自 API 级别 29 起可用。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
已弃用。 请改用 setCrop、setPosition、setBufferTransform 和 setScale。这些函数提供明确定义的行为,并允许应用进行更多控制。它还允许调用者在不同时间设置不同的属性,而无需一次指定所有所需的属性。
ASurfaceTransaction_setHdrMetadata_cta861_3
在android/surface_control.h
中声明
void ASurfaceTransaction_setHdrMetadata_cta861_3( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, struct AHdrMetadata_cta861_3 *_Nullable metadata )
在 surface 上设置 CTA 861.3“HDR Static Metadata Extension”静态元数据。
当 metadata 设置为 null 时,框架在渲染图面缓冲区时不会使用任何 cta861.3 元数据。
自 API 级别 29 起可用。
ASurfaceTransaction_setHdrMetadata_smpte2086
在android/surface_control.h
中声明
void ASurfaceTransaction_setHdrMetadata_smpte2086( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, struct AHdrMetadata_smpte2086 *_Nullable metadata )
SMPTE ST 2086“Mastering Display Color Volume”静态元数据。
当 metadata 设置为 null 时,框架在渲染图面缓冲区时不会使用任何 smpte2086 元数据。
自 API 级别 29 起可用。
ASurfaceTransaction_setOnCommit
在android/surface_control.h
中声明
void ASurfaceTransaction_setOnCommit( ASurfaceTransaction *_Nonnull transaction, void *_Null_unspecified context, ASurfaceTransaction_OnCommit _Nonnull func )
设置回调,该回调在应用此事务中的更新并准备好呈现时被调用。
此回调将在 ASurfaceTransaction_OnComplete 回调之前被调用。
自 API 级别 31 起可用。
ASurfaceTransaction_setOnComplete
在android/surface_control.h
中声明
void ASurfaceTransaction_setOnComplete( ASurfaceTransaction *_Nonnull transaction, void *_Null_unspecified context, ASurfaceTransaction_OnComplete _Nonnull func )
设置回调,该回调在呈现此事务中的更新时被调用。
有关回调语义和数据的详细信息,请参阅上面的 ASurfaceTransaction_OnComplete 声明中的注释。
自 API 级别 29 起可用。
ASurfaceTransaction_setPosition
在android/surface_control.h
中声明
void ASurfaceTransaction_setPosition( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, int32_t x, int32_t y )
指定 surface 在父级空间中绘制的位置。
自 API 级别 31 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
ASurfaceTransaction_setScale
在android/surface_control.h
中声明
void ASurfaceTransaction_setScale( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, float xScale, float yScale )
以 (0, 0) 为缩放中心点,设置 surface 的 x 和 y 缩放比例。
自 API 级别 31 起可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
ASurfaceTransaction_setVisibility
在android/surface_control.h
中声明
void ASurfaceTransaction_setVisibility( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, enum ASurfaceTransactionVisibility visibility )
更新 surface_control 的可见性。
如果 show 设置为 ASURFACE_TRANSACTION_VISIBILITY_HIDE,则 surface_control 及其子树中的所有图面都将被隐藏。
自 API 级别 29 起可用。
ASurfaceTransaction_setZOrder
在android/surface_control.h
中声明
void ASurfaceTransaction_setZOrder( ASurfaceTransaction *_Nonnull transaction, ASurfaceControl *_Nonnull surface_control, int32_t z_order )
更新 surface_control 的 z 顺序索引。
请注意,图面的 z 顺序是相对于此图面的同级图面而言的。具有相同 z 顺序的同级图面的行为是未定义的。
Z 顺序范围为 MIN_INT32 到 MAX_INT32。图层的默认 z 顺序索引为 0。
自 API 级别 29 起可用。