我有一个关于使导航应用程序更快更稳定的问题。
我的应用程序的基本层是一个简单的mapview,覆盖了几个叠加层(2个标记用于开始和目标,1个用于路径)。
我的想法是实现一个线程来显示路线,这样在计算更复杂的路线时,应用程序就不会挂断(就像现在一样)。
在实现该主题之后,没有任何更新显示,也许您可以帮我简短地看一下下面的代码摘录:
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
posUser = new GeoPoint((int) (loc.getLatitude() * 1E6), (int) (loc
.getLongitude() * 1E6));
new Thread(){
public void run(){
mapView.invalidate();
// Erase old overlays
mapView.getOverlays().clear();
// Draw updated overlay elements and adjust basic map settings
updateText();
if(firstRefresh){
adjustMap();
firstRefresh = false;
}
getAndPaintRoute();
drawMarkers();
}
};
}
某些功能已经汇总到像“drawMarkers()”或“updateText()”这样的方法......(它们不需要再注意; - )
答案 0 :(得分:2)
你什么时候要求线程运行?我只看到创建的代码。如果你这样做,你会发现只允许主(UI)线程更新,正如RPond所说。
相反,分开你的工作和post the results back to the main thread via a Handler。
答案 1 :(得分:0)
您只能更新UI线程上的UI,因此我认为这是问题所在。有关此问题的解决方案,请查看有关线程的article。
答案 2 :(得分:0)
我可能在这里咆哮错误的树,但我的猜测是,这与你在不是UI线程的线程上对MapView进行更改这一事实有关。
我希望这会导致其中一种可能性:
希望这会有所帮助 - 至少可以指出你是一个正确的方向。
答案 3 :(得分:0)
有人希望您不使用Google MapView来渲染导航,因为在阅读条款和条件时,导航不包含在可接受的使用政策中。
来自Android Maps APIs Terms of Service
根据第8节,您不得(也不允许任何其他人):
...
8.7。将服务或内容与任何产品,系统或应用程序一起使用或与之相关(a)基于来自传感器的位置输入的实时导航或路线引导(包括但不限于任何视觉或听觉转弯路线)指导);
...