![]() |
1
15
Android NDK提供了极其轻量级和高效的方式,将您的原生代码发布到任意循环器。关键点是,您应该向循环器提供任意文件描述符,并指定您感兴趣的文件事件(输入、输出等)。在后台,looper将轮询该文件描述符,一旦事件可用,它将在适当的线程上运行回调。
此代码生成下一个输出:
正如您从pid tid对中看到的,消息是在主线程上接收的。当然,您可能会发送比单字节消息更复杂的消息。 |
![]() |
2
3
要在Android UI(主)线程上运行C++代码,您必须使用Android的looper(activity.getMainLooper()或looper)。Java中的getMainLooper():
您需要编写一些Java来实现Runnable接口,因此以下代码采用Java语言:
现在,您必须在C++中获得Runner类及其构造函数:
这是最接近不编写Java代码的情况(您必须编写6行代码才能实现可运行的接口)。 |
![]() |
3
1
根据@Sergio的回答,这里有一个简单的包装器
然后是使用示例,希望它可能对任何希望在JNI中使用android java api处理程序进行类似操作的人有所帮助。
|
![]() |
4
1
另一种选择是使用 Arcana.cpp C++库,其中包括一个基于Android Looper的“调度程序”。在其最简单的形式中,您可以这样使用它:
如果您想更具冒险精神,可以将C++协同例程用于任务,或直接用于调度程序:
https://github.com/microsoft/arcana.cpp/blob/master/Source/Arcana.Tasks.md |
![]() |
Binoy Babu · 特定于ABI的android资源限定符 7 年前 |