如何使用从套接字流式传输的数据更新 Google 地图标记的位置?

How do I update a Google Map's Marker's position using data streamed from a socket?

我的应用程序应该使用通过 Internet 传输的数据在地图上跟踪飞机。我使用 Service 接收数据,然后使用 Messengers 在它和我的 MainActivity (thanks to this guide) 之间发送消息,它有我的 Fragment 和 SupportMapFragment (MainMapFragment) 以及 RecyclerView Fragment (AircraftListFragment).

每个Marker在一个HashMap中,在MainMapFragment中有一个Aircraft对象,Aircraft对象由Main维护Activity。我的 Activity 是否有类似 notifyDatasetChanged() 的东西来更新我的 MapFragment?显然我不能像这样在 MainMapFragment 中写一个方法:

public void updateAircraftArrayList(ArrayList<Aircraft> updatedAircrafts){
    this.aircraftArrayList = updatedAircrafts;
    updateMarkers(); //Update the Markers on the map
}

在我的 MainActivity 中这样访问:

class IncomingHandler extends android.os.Handler {
    @Override
    public void handleMessage(Message msg){
        String aircraftMsg = msg.getData().getString("fromSocket");
        Aircraft newAircraft = decodeSbsMessage(aircraftMsg);
        aircraftArrayList = searchThroughArrayListForAircraft(newAircraft);
        MainMapFragment.updateAircraftArrayList(aircraftArrayList);
    }
}

我听说过 EventBus,但据我所知,它不太适合处理来自 Socket 的常量流。

您可以从 MainActivity 调用 updateAircraftArrayList 方法:

your_instance_of_MainMapFragment.updateAircraftArrayList(aircraftArrayList)