在handler中调用BNRoutePlanInfos routePlaneInfo = BaiduNaviManagerFactory.getRoutePlanManager().getRoutePlanInfo(); 但是这个数据是在子线程中写的
时间: 2024-02-05 19:11:57 浏览: 71
是的,BaiduNaviManagerFactory.getRoutePlanManager().getRoutePlanInfo() 方法是在子线程中获取路线规划信息的。因此,如果您在主线程中调用这个方法,它会阻塞主线程,导致 UI 假死和 ANR。所以,您需要使用异步方式获取路线规划信息,例如使用 Handler 或 AsyncTask 等。
以下是在 Handler 中获取路线规划信息的示例代码:
```java
private static final int MSG_GET_ROUTE_PLAN_INFO = 1;
private Handler mHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_GET_ROUTE_PLAN_INFO:
BNRoutePlanInfos routePlanInfo = BaiduNaviManagerFactory.getRoutePlanManager().getRoutePlanInfo();
// do something with routePlanInfo
break;
default:
break;
}
}
};
private void getRoutePlanInfoAsync() {
new Thread(new Runnable() {
@Override
public void run() {
// do some heavy work here, such as route planning
// ...
// send message to handler to get route plan info
mHandler.sendEmptyMessage(MSG_GET_ROUTE_PLAN_INFO);
}
}).start();
}
```
在上面的代码中,我们使用了一个 Handler 来处理获取路线规划信息的消息。在子线程中执行耗时的路线规划操作后,我们向 Handler 发送一个空消息,告诉它现在可以获取路线规划信息了。然后,Handler 就会在主线程中执行 handleMessage 方法,并从导航管理器中获取路线规划信息。这样就可以避免在主线程中阻塞 UI。
阅读全文