Android 앱에서 Google지도를 사용하는 사람들은 프로세스 당 하나만 MapActivity
을 사용할 수 있음을 잘 알고 있습니다. bug discussing this in detail과 각 MapActivity를 별도의 프로세스에 배치하는 해결 방법이 있습니다. 몇 가지 이유로 내 앱에서이 작업을 수행하고 싶지 않고 작동하는 다른 해결 방법을 개발했습니다. 지도를 포함하는 각 Activity
를 들어동일한 프로세스에서 여러 MapActivities를 실행하기위한 기술
, 나는 그것이 자식 활동으로 MapActivity
onResume
/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
을 설정하기 만하면됩니다.
이것은 나를 위해 잘 작동하는 것 같습니다. 그러나 이것에 어떤 단점이 있습니까? 내 주요 관심사는 메모리 누수가지도가 포함 된 활동간에 갈 때 만들어집니다.
나는 이것에 대해서도 걱정이되었지만, 실제로 생각했던 것보다 훨씬 잘 수행됩니다. 'MapActivity'는 메모리 초기화에서 수행하는 작업을 유지해야합니다. 또한 각각의 MapActivity를 별도의 프로세스에 두는 대신이 기술을 비교해야합니다. –
정확히 MapActivity가하는 것처럼 보입니다. 라이브러리에 의해 관리되는 장치 캐시에서 다시 사용할 수있는 일종의 장치를 시작합니다. 이 작업이 정상적으로 작동하는 것을 확인해 주셔서 감사합니다. –