首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionBar进度旋转器同时添加1000个标记到android Googlemap

ActionBar进度旋转器同时添加1000个标记到android Googlemap
EN

Stack Overflow用户
提问于 2013-07-25 11:13:36
回答 1查看 1.5K关注 0票数 3

我有一个安卓应用程序,它可以使用Android扩展将1000个标记添加到扩展的GoogleMap中。不过,我想用

代码语言:javascript
复制
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

当标记被添加到地图上时,需要2-5秒。我的问题是:

  1. 我必须在UI线程上添加1000的标记。
  2. 不确定的旋转器也在UI线程上运行,因此在添加映射标记时它会“粘住”。

如何在自己的线程中运行不确定的旋转器,使其不受添加到扩展映射中的1000个标记的影响?我使用的扩展地图设置如下:

代码语言:javascript
复制
final FragmentManager fm = getSupportFragmentManager();
final SupportMapFragment f = (SupportMapFragment) fm.findFragmentById(R.id.map);
mGoogleMap = f.getExtendedMap();
final ClusteringSettings settings = new ClusteringSettings();
settings.iconDataProvider(new TowerIconDataProvider(getResources()));
settings.addMarkersDynamically(true);
mGoogleMap.setClustering(settings);

更新

我发现了我的addMarker()的根源

性能问题;我在调用的GoogleMap中添加了一个标记

.icon(BitmapDescriptorFactory.fromResource(R.drawable.my_drawable))

自定义标记图标

一旦我修改了我的代码,在我的addMarker循环之外执行这个操作,我就达到了所需的响应时间。

感谢MaciejGórski促使我认真研究自己的代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-26 12:36:48

如果ActionBar中的进度旋转器类似于ProgressDialog,那么是的,它必须在自己的线程中运行才能工作。幸运的是,AsyncTask使这件事变得非常容易。我建议的一个改进是在后台线程中做你的繁重工作。您可以从在AsyncTask中执行所有数据库查找等操作开始。您仍然可以在UI线程上添加标记,但是所有的数据处理都将在后台线程上完成。onPreExeecute()onProgressUpdate()onPostExecute()都在UI线程上执行,因此在那里执行UI操作是安全的。看看这个片段:

代码语言:javascript
复制
private class SetMarkersTask extends AsyncTask<Void, Marker, Void> 
{
     protected void onPreExecute() 
     {
         // Turn progress spinner on
         setProgressBarIndeterminateVisibility(false);
     }

     protected Void doInBackground(Void... params) 
     {
         // Does NOT run on UI thread
         // Long-running operation here; create a marker
         publishProgress(myMarker);
     }

     protected void onProgressUpdate(Marker... params) 
     {
         // Add newly-created marker to map
         addMarker(params[0]);
     }

     protected void onPostExecute(Void result) 
     {
         // Turn off progress spinner
         setProgressBarIndeterminateVisibility(false);
     }
 }

这可能不是您所需要的,但它应该让您了解如何使用ActionBar内部的进度旋转器来构造代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17856421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档