Question Technique pour exécuter plusieurs MapActivities dans le même processus


Il est bien connu des personnes utilisant Google Maps dans une application Android qu’elles ne peuvent en utiliser qu’une seule. MapActivity par processus. Il y a un bogue en discutant en détail ainsi que la solution de rechange consistant à placer chaque MapActivity dans un processus distinct. Je ne veux pas faire cela dans mon application pour quelques raisons et j'ai développé une autre solution qui semble fonctionner.

Pour chaque Activity qui contient une carte, je l'ai prolonger ActivityGroup et créer / détruire le MapActivity dans onResume/onPause comme une activité enfantine. Cela garantit qu'il n'y aura qu'une seule instance d'un MapActivity à la fois (en supposant que vous en ayez un Activity  montrant à la fois). Voici une version simplifiée de mon implémentation:

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();
    }

}

le MapActivity J'utilise n'est rien de spécial et ne nécessite aucune modification. Il définit juste un MapView comme vue du contenu.

Cela semble bien fonctionner pour moi. Mais y a-t-il un inconvénient à faire cela? Ma principale préoccupation est une fuite de mémoire créée lors du passage entre des activités contenant une carte.


14
2018-02-25 14:01


origine


Réponses:


Je suppose que la seule raison de ne pas le faire serait la performance. L'activité de la carte peut déjà être un peu chère, surtout au démarrage, donc si vous vous retrouvez à attribuer et à désaffecter la vue fréquemment, cela risque de ne pas fonctionner correctement. Cependant, cela dépend vraiment de la fréquence à laquelle la vue sera créée et supprimée, ce qui dépend entièrement des aspects comportementaux de votre application.


1
2018-03-02 22:55