想要在 Xamarin.Android 中异步加载地图上的标记
Wanted to load markers on maps asynchronously in Xamarin.Android
我正在加载 google 地图,然后通常需要在地图上添加标记
用标记加载地图需要 4 到 7 秒,但我想改进
应用程序的性能所以首先我只想显示地图和背景
我想加载标记并稍后在地图上应用。我尝试了很多方法
Task.Run(), Thread(threadStart()),RunonUiThread() 没有任何效果。
RunonUiThread 和 threadstart 正在阻塞 UI 并且需要更多时间来加载 Task.Run 中没有加载地图上的标记的地方。
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetUpMap();
}
SetUpMap(){
if (_map == null)
{
Utils.mapFrag =
(MapFragment)FragmentManager.FindFragmentById(Resource.Id.map);
RunOnUiThread(() =>
{
//initializing map which is calling IOnMapReady
asynchronously
Utils.mapFrag.GetMapAsync(this);
});
}
else
{
LoadMarkersOnMap(_map);
}
}
public void OnMapReady(GoogleMap googleMap)
{
_map = googleMap;
_map.UiSettings.MapToolbarEnabled = false;
_map.UiSettings.MyLocationButtonEnabled = false;
_map.UiSettings.ZoomControlsEnabled = false;
Utils.map = googleMap;
System.Threading.Tasks.Task.Run(() =>
{
LoadMarkersOnMap(_map);
if (progressDialog != null && progressDialog.IsShowing)
progressDialog.Dismiss();
});
}
LoadMarkerOnMap(Googlemap _map){
RunOnUiThread(()=>{
//here i m getting the list of markers from the database
and adding it to map
});
}
即使我尝试不放置 runonUithread,它仍然阻塞 ui 或
没有正确加载标记。有时它会加载标记有时它会加载标记
不加载所有标记。
在此处查看 Xamarin 文档:Writing Responsive Applications。
我正在加载 google 地图,然后通常需要在地图上添加标记 用标记加载地图需要 4 到 7 秒,但我想改进 应用程序的性能所以首先我只想显示地图和背景 我想加载标记并稍后在地图上应用。我尝试了很多方法 Task.Run(), Thread(threadStart()),RunonUiThread() 没有任何效果。 RunonUiThread 和 threadstart 正在阻塞 UI 并且需要更多时间来加载 Task.Run 中没有加载地图上的标记的地方。
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetUpMap();
}
SetUpMap(){
if (_map == null)
{
Utils.mapFrag =
(MapFragment)FragmentManager.FindFragmentById(Resource.Id.map);
RunOnUiThread(() =>
{
//initializing map which is calling IOnMapReady
asynchronously
Utils.mapFrag.GetMapAsync(this);
});
}
else
{
LoadMarkersOnMap(_map);
}
}
public void OnMapReady(GoogleMap googleMap)
{
_map = googleMap;
_map.UiSettings.MapToolbarEnabled = false;
_map.UiSettings.MyLocationButtonEnabled = false;
_map.UiSettings.ZoomControlsEnabled = false;
Utils.map = googleMap;
System.Threading.Tasks.Task.Run(() =>
{
LoadMarkersOnMap(_map);
if (progressDialog != null && progressDialog.IsShowing)
progressDialog.Dismiss();
});
}
LoadMarkerOnMap(Googlemap _map){
RunOnUiThread(()=>{
//here i m getting the list of markers from the database
and adding it to map
});
}
即使我尝试不放置 runonUithread,它仍然阻塞 ui 或 没有正确加载标记。有时它会加载标记有时它会加载标记 不加载所有标记。
在此处查看 Xamarin 文档:Writing Responsive Applications。