2011-02-25 2 views
14

Android 앱에서 Google지도를 사용하는 사람들은 프로세스 당 하나만 MapActivity을 사용할 수 있음을 잘 알고 있습니다. bug discussing this in detail과 각 MapActivity를 별도의 프로세스에 배치하는 해결 방법이 있습니다. 몇 가지 이유로 내 앱에서이 작업을 수행하고 싶지 않고 작동하는 다른 해결 방법을 개발했습니다. 지도를 포함하는 각 Activity를 들어동일한 프로세스에서 여러 MapActivities를 실행하기위한 기술

, 나는 그것이 자식 활동으로 MapActivityonResume/onPause에 파괴/ActivityGroup를 확장하고 만들 수 있습니다. 이렇게하면 한번에 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를 별도의 프로세스에 두는 대신이 기술을 비교해야합니다. –

+0

정확히 MapActivity가하는 것처럼 보입니다. 라이브러리에 의해 관리되는 장치 캐시에서 다시 사용할 수있는 일종의 장치를 시작합니다. 이 작업이 정상적으로 작동하는 것을 확인해 주셔서 감사합니다. –

관련 문제