我写了一个MapActivity
类,它可以显示一组地方和一个地方。启动时,应用程序会创建此MapActivity
的实例并显示多个位置。如果用户点击某个地点,则会启动新的Activity
,其中会显示所选地点的详细信息。此活动有一个菜单项,允许用户在地图上查看地点 - 这会导致创建MapActivity
的新实例,但现在只显示此单个地点。
现在的问题是,如果用户导航回第一个MapActivity
(显示多个位置的那个),则不会再加载切片+有时会遇到OutOfMemoryErrors。
根据Android JavaDocs,每个进程只能有一个MapActivity
。但是,我不想将我的MapActivity
定义为singleInstance / singleTask,因为用户应始终能够导航回显示多个位置的第一个MapActivity。
我已经看到适用于Android的Google商家信息应用(已附带Google Map 4.4)使用了多个MapActivity
个实例。这怎么可能?我怎样才能在我的应用程序中实现它?
答案 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跟踪器中的错误的讨论:
答案 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
课程。