2011-02-25 64 views
14

在Android應用程序中使用Google地圖的人們很清楚,他們每個進程只能使用一個MapActivity。有一個bug discussing this in detail以及將每個MapActivity放在單獨的進程中的解決方法。我不想在我的應用程序中執行此操作,原因有幾條,並且開發了另一種似乎可行的解決方法。用於在同一過程中運行多個MapActivities的技術

對於包含地圖的每個Activity,我已經把它擴展ActivityGroup和創建/銷燬MapActivityonResume/作爲孩子的活動。這確保一次只有一個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作爲其內容視圖。

這似乎對我很好。但是這樣做有什麼缺點嗎?我主要關心的是在包含地圖的活動之間創建內存泄漏。

回答

1

我猜想不這樣做的唯一原因就是性能。地圖活動可能已經有點兒了,特別是在開始時,所以如果您發現自己經常分配和取消分配視圖,這可能表現不佳。但是,它的確依賴於視圖創建和刪除的頻率,這完全取決於應用程序的行爲方面。

+0

我也很擔心這件事,但實際上它比我想象的要好得多。 'MapActivity'必須保持它在內存中初始化時的功能。而且你必須權衡這種技術與將每個'MapActivity'放在一個單獨過程中的替代方法。 – 2011-03-04 13:33:04

+0

這就是MapActivity的功能。它啓動某種可在由庫管理的設備高速緩存上重新使用。很高興有確認,這工作正常。 – 2011-03-04 15:06:42

相關問題