IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Réduire la mémoire qu'utilise mon application Android


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 58
    Billets dans le blog
    1
    Par défaut Réduire la mémoire qu'utilise mon application Android
    Bonsoir tout le monde ! J'ai un problème depuis quelque temps avec le développement des applications Android avec Delphi. J'Utilise EDI RAD STUDIO Berlin actuellement. Mon problème est que lorsque je crée dynamiquement des TRectangle l'application consomme environ 1,2 Mo de la mémoire RAM et si je laisse cela pendant des heures cela consomme davantage. Je ne comprends pas comment faire pour résoudre ce problème. Pourriez-vous m'aider ? Je tiens à rappeler que les applications tournent sur Android 7.0.

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Bonsoir ! Eh bien, c'est certainement qu'il y a des objets qui sont créés et qui ne sont pas détruits. Par exemple, un Free qui est à la fin d'une procédure et qui dans certains cas n'est pas appelé... Ou encore un constructeur mal écrit, qui fait appel à d'autres constructeurs sans prévoir le cas où l'objet est recréé sans nouvelle allocation de mémoire. C'est forcément quelque chose comme ça.

    Bon courage ! Montrez-nous votre code si vous voulez une aide plus efficace.

  3. #3
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 58
    Billets dans le blog
    1
    Par défaut Voici le code de objet que j'ai instancié !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
     
      CardM = class(TObject)
     
      private
          Cadre : TRectangle ;
          Titre,Detail,Image  :String;
          Hauteur : integer;
          Constructor Create(SParent:TVertScrollBox;STitre,SDetail,SImage:string);
          destructor destroy ; override;
     end;
     
     
      CardV = class(TObject)
     
       private
     
       ScrollBox :    TVertScrollBox;
       Cadres:         array of CardM;
       MyTaille :     Integer ;
     
       public
     
       procedure CreerDefCardM(sTitre,sImage,sDetail:string) ; 
       constructor Create(sParent: TLayout);
       destructor  destroy ;  virtual ;
     
       end;
     
     
    implementation
     
    uses FMX.Dialogs;
     
    { CardV }
     
     
     
    procedure CardV.CreerDefCardM(sTitre,sImage,sDetail:string) ;
    begin
     
       if ((sTitre.Length)>0) and ((sImage.Length)>4) and (sDetail.Length<=155)  then
       begin
     
          inc(Self.MyTaille);
          SetLength(Cadres,Self.Mytaille+1);
          Cadres[Mytaille]:=SimpleCard.Create(ScrollBox,sTitre,sDetail,sImage);
      end;
     
    end;
     
    destructor CardV.destroy;
    begin
     
    end;
     
    { SimpleCard }
     
    constructor CardM.create(SParent:TVertScrollBox;STitre,SDetail,SImage:string);
    begin
     
        with Self do
        begin
          Titre :=STitre;
          Detail :=SDetail;
          Image :=SImage;
        end;
     
      Cadre := Trectangle.Create(nil);
      with Cadre do
            begin
            Align:=TAlignLayout.Top;
            Parent:=SParent;
            with Margins do
            begin
            Left:=10;
            Right:=10;
            Bottom:=10;
            Top:=10;
            end;
           Height:= 320;
           Stroke.Color :=TAlphaColorRec.Null;
           Fill.Color:=TAlphaColorRec.White;
          end;
     
     
         with TLabel.Create(nil) do
         begin
           Text := Self.titre;
           Font.Family := 'Arial';
           Align := TAlignLayout.Top;
           with Margins do
            begin
              Left:=8;
              Right:=10;
              Bottom:=10;
              Top:=5;
           end;
           TextAlign:=TTextAlign.Leading;
           Parent :=  Self.Cadre;
         end;
     
          With TShadowEffect.Create(Cadre) do
          begin
             parent := Cadre;
             ShadowColor := $FF9B9898;
          end;
     
          with TText.Create(Self.Cadre) do
          begin
             Align:=TAlignLayout.Client;
             Parent:=Self.Cadre;
             with Margins do
             begin
             Left:=10;
             Right:=10;
             Bottom:=5;
             Top:=10;
            end;
            with TextSettings do
            begin
             HorzAlign := TTextAlign.Leading;
             VertAlign:=TTextALign.Leading;
             Trimming:=TTextTrimming.character;
            end;
             Color := $FF858585;
             Text :=Self.Detail;
          end;
     
     
          with TImage.Create(nil) do
          begin
           Parent :=Self.Cadre;
           Align:=TAlignLayout.Top;
           Height:=200;
           WrapMode:=TImageWrapMode.Stretch;
           Bitmap.LoadFromFile(TPath.GetDocumentsPath + PathDelim + 'xdg.jpg');   // Lien utilisé pour faire des tests TPath.GetDocumentsPath + PathDelim + 'xdg.jpg'
     
          end;
     
     
    end;
     
    destructor CardM.destroy;
    begin
      inherited;
    end;

  4. #4
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 58
    Billets dans le blog
    1
    Par défaut Voici le code de l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      I: Integer;
    begin
     with CardV.Create(Layout1) do
     begin
     for I := 0 to 100 do
     CreerDefCardM('Titre '+intTostr(I),'jjnjhhhj','jjjj');
     end;
    end;
    Je voulais réalisé des cartes un semblable aux cartes de jeux donc je me suis dis que les objets de devraient car l'utilisateur doit pouvoir intéragir avec les cartes en les touchants être libéré est-ce vrai ?
    NB : Il y a un composant TLayout qui a été ajouter sur la fiche !

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Déjà, là, il y a un problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button1Click(Sender: TObject);
    var
      I: Integer;
    begin
     with CardV.Create(Layout1) do
     begin
     for I := 0 to 100 do
     CreerDefCardM('Titre '+intTostr(I),'jjnjhhhj','jjjj');
     end;
    end;
    L'objet CardV créé n'est jamais détruit.

    Ensuite, à quoi sert le code suivant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    destructor CardV.destroy;
    begin
     
    end;
    Enfin, sauf erreur de ma part, rien n'est prévu pour libérer les objets créés dans le constructeur de la classe CardM ! Bref vous créez des objets sans vous inquiéter de les libérer.

    Bon courage !

  6. #6
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 58
    Billets dans le blog
    1
    Par défaut
    Merci de votre réponse ! En realité je me disais qu'étant donné que je veux utiliser interagir avec l'objet je n'avais pas besoin de le détruire ! Un peu comme lors de la création d'une ListView.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Android Studio : mon app s'ouvre et se referme aussitôt
    Par gary45 dans le forum Android Studio
    Réponses: 5
    Dernier message: 17/03/2017, 12h27
  2. [Android] consommation memoire dans mon app
    Par sinzen dans le forum Android
    Réponses: 16
    Dernier message: 17/12/2016, 15h23
  3. Quelle base de données pour mon app Android
    Par Emy1992 dans le forum Android
    Réponses: 1
    Dernier message: 15/07/2013, 01h45
  4. Android instance unique de mon app
    Par n2engineer5 dans le forum Android
    Réponses: 9
    Dernier message: 25/04/2012, 09h09
  5. [SERVLET][EJB][Noob]Utiliser mon SERVLET avec mon EJB
    Par Devil666 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 15/04/2005, 13h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo