在Android應用程序中使用Google地圖的人們很清楚,他們每個進程只能使用一個MapActivity
。有一個bug discussing this in detail以及將每個MapActivity放在單獨的進程中的解決方法。我不想在我的應用程序中執行此操作,原因有幾條,並且開發了另一種似乎可行的解決方法。用於在同一過程中運行多個MapActivities的技術
對於包含地圖的每個Activity
,我已經把它擴展ActivityGroup
和創建/銷燬MapActivity
在onResume
/作爲孩子的活動。這確保一次只有一個MapActivity
的實例(假設您一次顯示一個Activity
)。下面是我實現的一個簡化版本:
public class MyMapActivityGroup extends ActivityGroup {
@Override
protected void onResume() {
super.onResume();
addMapView();
}
@Override
protected void onPause() {
super.onPause();
removeMapView();
}
private void addMapView() {
Intent intent = new Intent(this, MyMapActivity.class);
Window window = getLocalActivityManager().startActivity("map", intent);
setContentView(window.getDecorView());
}
private void removeMapView() {
setContentView(new FrameLayout(this));
getLocalActivityManager().removeAllActivities();
}
}
我使用的是MapActivity
沒有什麼特別的,不需要任何修改。它只是設置一個MapView
作爲其內容視圖。
這似乎對我很好。但是這樣做有什麼缺點嗎?我主要關心的是在包含地圖的活動之間創建內存泄漏。
我也很擔心這件事,但實際上它比我想象的要好得多。 'MapActivity'必須保持它在內存中初始化時的功能。而且你必須權衡這種技術與將每個'MapActivity'放在一個單獨過程中的替代方法。 – 2011-03-04 13:33:04
這就是MapActivity的功能。它啓動某種可在由庫管理的設備高速緩存上重新使用。很高興有確認,這工作正常。 – 2011-03-04 15:06:42