Android NDK ALooper_pollOnce() 与 ALooper_pollAll()

问题描述 投票:0回答:2

Android NDK中,

ALooper_pollOnce()
ALooper_pollAll()
有什么区别?

android android-ndk event-handling
2个回答
6
投票

这些简单的指定要从 Looper 的事件队列处理多少(最大)回调。顾名思义,

pollAll()
执行事件队列中的所有回调,直到遇到数据事件、错误或超时。另一方面,一旦执行第一个回调,
pollOnce()
就会返回 ALOOPER_POLL_CALLBACK。

基本上,他们的关系可以用下面的伪代码来表达:

int ALooper_pollAll(int timeoutMillis, int* outFd, int* outEvents, void** outData) {
  int result;
  do {
    result = ALooper_pollOnce(timeoutMillis, outFd, outEvents, outData);
  } while (result == ALOOPER_POLL_CALLBACK);
  return result;
}

0
投票
不应该使用

ALooper_pollAll
(事实上,它目前在 AOSP 中被标记为已删除,因此很快就无法调用)。
ALooper_pollAll
中存在一个错误,这意味着它可能无法响应
ALooper_wake
。这些问题的详细解释见https://github.com/android/ndk/discussions/2020

两者之间的预期区别是

ALooper_pollAll
不会将控制权返回给调用者,直到它收到回调未处理的事件(例如未注册回调的合法事件、错误或显式唤醒) ),而
ALooper_pollOnce
将在处理第一个事件、回调或其他事件后返回。

© www.soinside.com 2019 - 2024. All rights reserved.