在android中,如何在单独的线程中更新google地图标记位置
我试图在一个单独的线程中更新谷歌地图标记位置。我可以在主线程中很好地更新标记,但只要我在单独的线程中尝试,应用程序就会崩溃 日志:在android中,如何在单独的线程中更新google地图标记位置,android,multithreading,api,google-maps,marker,Android,Multithreading,Api,Google Maps,Marker,我试图在一个单独的线程中更新谷歌地图标记位置。我可以在主线程中很好地更新标记,但只要我在单独的线程中尝试,应用程序就会崩溃 日志: 06-10 12:35:37.107: E/AndroidRuntime(25915): FATAL EXCEPTION: Thread-2909 06-10 12:35:37.107: E/AndroidRuntime(25915): java.lang.IllegalStateException: Not on the main thread 06-10 12:
06-10 12:35:37.107: E/AndroidRuntime(25915): FATAL EXCEPTION: Thread-2909
06-10 12:35:37.107: E/AndroidRuntime(25915): java.lang.IllegalStateException: Not on the main thread
06-10 12:35:37.107: E/AndroidRuntime(25915): at com.google.l.a.ce.b(Unknown Source)
06-10 12:35:37.107: E/AndroidRuntime(25915): at com.google.maps.api.android.lib6.d.ct.a(Unknown Source)
06-10 12:35:37.107: E/AndroidRuntime(25915): at com.google.maps.api.android.lib6.d.aq.a(Unknown Source)
06-10 12:35:37.107: E/AndroidRuntime(25915): at com.google.android.gms.maps.model.internal.t.onTransact(SourceFile:73)
06-10 12:35:37.107: E/AndroidRuntime(25915): at android.os.Binder.transact(Binder.java:380)
06-10 12:35:37.107: E/AndroidRuntime(25915): at com.google.android.gms.maps.model.internal.zzi$zza$zza.setPosition(Unknown Source)
06-10 12:35:37.107: E/AndroidRuntime(25915): at com.google.android.gms.maps.model.Marker.setPosition(Unknown Source)
而线程:
new Thread(new Runnable() {
Marker mkr = marker;
public void run(){
double lng = 78.486671;
double lat = 17.385044;
mkr.setPosition(new LatLng(lat, lng));
}
}).start();
您可以使用
runOnUiThread()
修改辅助线程内的标记位置,例如,请参阅
在您的情况下,可能是这样的:
new Thread(new Runnable() {
Marker mkr = marker;
public void run(){
runOnUiThread(new Runnable() {
@Override
public void run() {
double lng = 78.486671;
double lat = 17.385044;
mkr.setPosition(new LatLng(lat, lng));
}
});
}
}).start();
由于错误状态,您无法从主UI线程更新标记。你想在一个单独的线程上完成什么?我在跟踪某个东西,需要在地图上标出它的位置。对象的lng和lat将不断更改,我想更新一个标记以指向其位置。您可以使用
runOnUiThread()
来修改工作线程内的标记位置,例如,请参见此处:!!!伟大的榜样!!!非常好,谢谢你的快速帮助!