如何在每个Android应用程序/进程中使用多个MapActivities / MapViews

我写了一个MapActivity类,它能够显示一组地方以及单个地方。 启动时,应用程序创build此MapActivity一个实例并显示多个位置。 如果用户点击某个地方,则启动一个新的“ Activity ,显示所选地点的详细信息。 这个活动有一个菜单项,允许用户查看地图上的位置 – 这会导致创build一个新的MapActivity实例,除了现在只显示这个地方。

现在的问题是,如果用户导航回到第一个MapActivity (显示多个地方的那个),则不会再加载瓦片+有时会遇到OutOfMemoryErrors。

根据Android JavaDocs,每个进程只能有一个MapActivity 。 但是,我不想将我的MapActivity定义为singleInstance / singleTask,因为用户应该始终能够导航回显示多个位置的第一个MapActivity。

我已经看到,Google地图应用(与Google Map 4.4一起)为Android使用多个MapActivity实例。 这怎么可能? 我怎么能在我的应用程序中实现它?

根据Android JavaDocs,每个类只能有一个MapActivity

这不是每个类的一个地图视图,而是每个过程。

众所周知,在一个进程中使用多个mapviews时可能会遇到一些问题。 通常情况就是这样(你的应用程序在一个进程中运行),如果你没有configuration任何特定的东西。 你可以使用清单中的android:process属性来分配你的acitivites:

 <activity android:name=".activity.directory.MapView1" android:process=":MapView1"> <activity android:name=".activity.directory.MapView2" android:process=":MapView2"> 

这样你就可以在不同的进程中运行这些活动,如果你不在活动中使用任何共享的静态variables的话,那么运行起来就很好。

另请参阅有关Android错误跟踪器中的错误的讨论:

http://code.google.com/p/android/issues/detail?id=3756

每个进程只能有一个正在运行,每个进程可以有多个MapActivity。 每个MapActivity只能分配一个MapView。 您可以通过在相同的MapActivity中重复使用相同的MapView来显示不同的地图。 您可以通过将其声明为静态类variables来重复使用MapView,将其从当前添加到视图中的视图中移除,然后将其显示出来,给它一个新的GPS坐标并将其添加到下一个视图。 当您完成MapActivity的完成后,您可以打开一个新的MapActivity。 这工作,我做我的应用程序。

另一个简单的解决scheme:只需重写所有MapActivities的onDestroy方法,以防止closures资源,例如:

  @Override protected void onDestroy() { super.onStop(); } 

我们应该在这里调用onStop来防止抛出RuntimeException。 是的,这是一个黑客,但它的作品。

更新:

Google Maps Android API v2支持碎片。 这意味着你可以像任何其他片段一样轻松地显示多个地图。

请参阅文档并阅读有关新的MapFragment类的更多信息。