|
|
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 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 11 月前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 11 月前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 11 月前 |
|
pebble unit · 如何检查以前缀开头、以后缀结尾的属性(不是属性值) 11 月前 |
|
|
rudraraj · java中未声明最终变量 11 月前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 12 月前 |