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

时间:2010-07-31 19:45:04

标签: android google-maps android-mapview

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

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

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

我已经看到适用于Android的Google商家信息应用(已附带Google Map 4.4)使用了多个MapActivity个实例。这怎么可能?我怎样才能在我的应用程序中实现它?

4 个答案:

答案 0 :(得分:20)

  

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

每个类不是一个地图视图,而是每个进程。

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

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

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

通过这种方式,您可以在不同的进程中运行这些活动,如果您不在活动中使用任何共享的静态变量,那么这种活动很有效。

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

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

答案 1 :(得分:4)

只要每次只运行一个MapActivity,每个进程就可以拥有多个MapActivity。每个MapActivity只能分配一个MapView。您可以通过在同一MapActivity中重用相同的MapView来显示不同的地图。您可以通过将MapView声明为静态类变量来重复使用它,将其从当前添加到的视图中删除,当您完成显示时,为其提供新的GPS坐标并将其添加到下一个视图。当您完成MapActivity完成后,您可以打开一个新的MapActivity。这是有效的,我在我的应用程序中。

答案 2 :(得分:2)

另一个简单的解决方案:只需覆盖所有MapActivities的onDestroy方法,以防止关闭资源,例如:

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

我们应该在这里调用onStop以防止抛出RuntimeException。是的,这是一个黑客,但它的确有效。

答案 3 :(得分:1)

更新

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

请参阅documentation并详细了解新的MapFragment课程。