Pepper机器人运行两周不同的进程同步还是异步?
声明:本媒体部分图片、文章来源于网络
声明:本媒体部分图片、文章来源于网络
版权归原作者所有,如有侵权,请与我联系删除。
Pepper机器人运行两周不同的进程:
一个在平板是,
一个在机器人头部中.
在两个CPU之间有通过USB使用TCP/IP协议的信息传递交换 :
您可以灵活地设计代码,并决定是要同步还是异步处理此通信.
但是,存在*佳的方式,同步或异步工作之间的选择取决于我们将在下面描述的一些因素.
在UI线程中
Android系统允许您使用不同的Activity生命周期回调访问UI线程,例如:
@Override
protected void onCreate(Bundle savedInstanceState){
// Executes on the UI thread.
}
@Override
protected void onResume() {
// Executes on the UI thread.
}
...
protected void onCreate(Bundle savedInstanceState){
// Executes on the UI thread.
}
@Override
protected void onResume() {
// Executes on the UI thread.
}
...
如果在UI线程上执行同步调用,则会阻塞UI并导致糟糕的用户体验.
为了防止这种情况,当您处理UI线程时,必须使用QiSDK异步调用,否则NetworkOnMainThreadException 将抛出.
在实践中
不做:
// UI thread.
Say say = SayBuilder.with(qiContext)
.withText("Hello")
.build(); // Throws a NetworkOnMainThreadException.
// UI thread.
goTo.run(); // Throws a NetworkOnMainThreadException.
做:
// UI thread.
Future
.withText("Hello")
.buildAsync(); // OK.
// UI thread.
goTo.async().run(); // OK.