0

这是对我更老、更广泛的问题的答案所引发的研究的延续。

使用单个游标(通过 CursorLoader 获得)来提供两个不同的视图是否正确,即:

  1. 通过 SimpleCursorAdapter 的ListView
  2. com.google.android.gms.maps。带标记的谷歌地图?

到目前为止我得到的结果:

  1. 如果两个视图同步地给出光标(即:不涉及其他线程),那么视觉上一切正常,除了填充 GoogleMap 时 UI 被严重阻塞
  2. 如果 GoogleMap 是从AsyncTask中的 Cursor 填充的,则 UI 会变得响应,但ListView存在异常:一些行重复,还有一些标记没有到达地图。

我的设置的详细信息

  1. 在onResume()期间在FragmentActivity中加载 SQLite 游标
  2. 上述活动承载ViewPager有两个片段:ListFragmentSupportMapFragment(使用 ViewPager 的结果是两个片段将始终处于活动状态)
  3. 来自活动的游标通过Otto总线传递到片段(对于不熟悉的:这只是回调接口的精简替代,它在主线程上同步传递结果)
4

1 回答 1

1

我相信这样做是正确的。但是可以改进的是,如果 MapFragment 不可见,则它不会填充 Map。当用户滑动到 MapFragment 页面时,它会填充它。

或者,您甚至可以进行以下操作。当 MapFragment 不可见时,它开始填充地图,但它以块的形式执行此操作(例如,一个块中的 5 个标记)。一旦填充了一个块,您可以通过调度另一个可运行对象在主线程处理程序中执行来开始下一个块。这不会阻塞主线程,并将“在后台”准备地图。

于 2013-08-23T09:09:25.617 回答