German Android 4.0.4 Problem ? APP angehalten !

Paulsche

Well-Known Member
Licensed User
Longtime User
Hallo,

ich habe foglendes Problem:
Seit ich vom Galaxy S2 auf S3 gewechselt habe,
läuft meine App nicht mehr richtig, ich vermute dass es
an Android-Version 4.0.4 liegen könnte.

Symptom: App bleibt immer wieder mit Meldung " 'Appname' angehalten! " hängen und wird beendet.

Der Fehler tritt wahllos an ganz verschiedenen Stellen auf, manchmal schon gleich nach APP-Start bei betätigen des ersten Menübuttons,
oft erst nach hin- und her springen in verschiedenen Layouts.
Bei Auswahl eines buttons, oder Spinner, ganz verschieden.

Hab jetzt mal eine APP-Version von vor 2 Monaten installiert, auch da das gleiche Problem, kann also auch nicht mit B4A-2.2 zu tun haben.

Von Usern die meine APP heruntergeladen haben, habe ich bis jetzt nur 2 Meldungen mit dem Fehler bekommen, da warte ich noch auf eine Antwort welche Android-Version das ist.

Hat jemand von so einem aktuellen Problem gehört ?
 

Paulsche

Well-Known Member
Licensed User
Longtime User
Hallo, ich hab hier mal die entsprechende Stelle vom Errorlog beigefügt.
Der Fehler kam dann Click des Button "BTN00Startseite_Wasser" .

Scheint ein OutofMemory Fehler zu sein.
 

Attachments

  • errorlog.txt
    15.4 KB · Views: 416

Paulsche

Well-Known Member
Licensed User
Longtime User
Hab mich im Forum mal nach Memory-Problemen umgesehen,
es scheint so als ob ich folgendes Problem habe:

Ich habe mehrere Masken bzw. Panels in Layouts, wo ich immer
per Canvas und Drawline einen Rahmen um das Panel zeichne und und die Menüs mit Linien einrahme.

Ich habe dies mal ausgeblendet und der Fehler kam nicht mehr.

Ich habe gelesen dass ein Canvas z.B. canvas.initialize(Panel) so viel Speicher benötigt wie das Panel groß ist, auch wenn ich nur einen Rahmen zeichne.

Und mit jeder initialisierung für (jedes Panel) eine neue Bitmap mit der größe erstellt wird. Das würde natürlich den Fehler erklären, da der freie Speicher mit jedem hin und her wechseln der Masken immer keiner wird.

jetzt überlege ich wie ich am besten Linien zeichnen lasse, evtl. Label 2dip schmal machen ?
 

klaus

Expert
Licensed User
Longtime User
Wie sind Deine Panels aufgebaut ?
Könntest Du mit der Vordergrundfarbe der Einträge und der Hintergrundfarbe des Panels und einem versetzen der Einträge spielen ?
Das heisst die Linienfarbe ist die Farbe des Panels und die Left / Top Eigenschaften der Einträge sind versetzt.

Beste Grüsse.
 

Paulsche

Well-Known Member
Licensed User
Longtime User
Äh, Klaus, ich verstehe nicht ganz was du meinst ?
Hier mal bisschen Code:

B4X:
   pnl01Zaehlerverwaltung.Initialize("pnl01Zaehlerverwaltung")                  'Anlegen/ändern/löschen der Zähler
   Activity.AddView(pnl01Zaehlerverwaltung,0dip,0dip,100%x,100%y)
   pnl01Zaehlerverwaltung.LoadLayout("01Zaehlerverwaltung")
   pnl01Zaehlerverwaltung.Visible   = False
   ypos = LBL01Titel.Top+LBL01Titel.Height + (LBL01Titel.Height/4)
   pnl01Zaehlerverwaltung.AddView(scv01Zaehlerverwaltung,8dip,ypos,100%x-16dip,SPN01Zaehler.Top-ypos-(SPN01Zaehler.Height/2))

   pnl02Zaehlerstaende.Initialize("pnl02Zaehlerstaende")                     'Anlegen/ändern/löschen der Zähler
   Activity.AddView(pnl02Zaehlerstaende,0dip,0dip,100%x,100%y)
   pnl02Zaehlerstaende.LoadLayout("02Zaehlerstaende")
   pnl02Zaehlerstaende.Visible   = False
   ypos = LBL02Titel.Top+LBL02Titel.Height + (LBL02Titel.Height/4)
   pnl02Zaehlerstaende.AddView(scv02Zaehlerstaende,8dip,ypos,100%x-16dip,SPN02Zaehlerauswahl.Top-ypos-(SPN02Zaehlerauswahl.Height/2))

   pnl03ZstandEingabe.Initialize("pnl03ZstandEingabe")                        'Zählerstand Eingabe
   Activity.AddView(pnl03ZstandEingabe,0dip,0dip,100%x,100%y)
   pnl03ZstandEingabe.LoadLayout("03ZstandEingabe")
   pnl03ZstandEingabe.Visible   = False
   ypos = LBL03Titel.Top+LBL03Titel.Height + (LBL03Titel.Height/4)
   pnl03ZstandEingabe.AddView(scv03Zaehlerstandeingabe,8dip,ypos,100%x-16dip,LBL03Temperatur_Status.Top-ypos-(LBL03Temperatur_Status.Height/2))


B4X:
Sub ZaehlerVerwaltung
   Select ZaehlerArtAuswahl
      Case "Gaszähler"
         LBL01dat_faktor_kwh.TextColor   = DATfarbe
      Case "Stromzähler", "Wasseruhr", "Sonstige Zähler"
         LBL01dat_faktor_kwh.TextColor   = Colors.LightGray
   End Select
   
   zweitarifzaehler   = False                                          'Standardmässig ausschalten
   
   If cr_zaehler.RowCount >0 Then                                       'wenn mind. 1 Zählereintrag vorhanden
      Zaehlerdaten_zeigen                                             'Labels mit Zählerdaten belegen
   Else                                                         'wenn kein Eintrag vorhanden
      Zaehler_bearbeiten_beendet                                       'Eingabefelder deaktivieren
      LBL01dat_Zaehlernr.Text         = ""
      LBL01dat_Bezeichnung.Text      = ""
      CHKbox01Zweitarifzaehler.Checked = False
      LBL01dat_Anbieter.Text         = ""
      LBL01dat_datum.Text            = ""
      LBL01dat_datumvon.Text         = ""
      LBL01dat_datumbis.Text         = ""
      LBL01dat_faktor_kwh.Text      = Convert.ToGerman(0,5)
      LBL01dat_Grundpreis.Text      = Convert.ToGerman(0,2)
      LBL01dat_EHTpreis_HT.Text      = Convert.ToGerman(0,4)
      LBL01dat_EHTpreis_NT.Text      = Convert.ToGerman(0,4)
      LBL01dat_Abschlag.Text         = Convert.ToGerman(0,2)
      LBL01Ext_Grundpreis.Text      = "€"                              'Währungssymbol für Grundpreis
      LBL01Ext_Abschlag.Text         = "€"                              'Währungssymbol für Abschlag
      LBL01EHTart.Text            = "kwh"                              'Einheit 
      If ZaehlerArtAuswahl = "Wasseruhr" Then LBL01EHTart.Text = "m³"
      LBL01EHTwaehr.Text            = "€"                              'Währung für EUR
      LBL01Ext_EHTpreis_HT.Text      = "€"                              'Währung für Betrag/einheit HT
      LBL01Ext_EHTpreis_NT.Text      = "€"                              'Währung für Betrag/einheit NT
      LBL01dat_Notiz.Text            = ""
      Grundpreis_en               = 0
      EHTpreis_HT_en               = 0
      EHTpreis_NT_en               = 0
      Abschlag_en                  = 0
      LBL01Zaehlerauswahl.Text      = "Zähler(0/0):"
      LBL01datObjekt.Text            = ""
   End If
   LBL01dat_Zaehlerart.Text         = ZaehlerArtAuswahl
   
   Dim rechteck As Rect
   cnvs.Initialize(pnl01Zaehlerverwaltung)
   rechteck.Initialize(4dip,5dip,100%x-4dip,SPN01Zaehler.Top-(SPN01Zaehler.Height/4))'Rahmen um oberen Bereich definieren
   cnvs.DrawRect(rechteck,Colors.DarkGray,False,2dip)                        'Rahmen um oberen Bereich zeichnen
   cnvs.DrawLine(4dip,LBL01Titel.Top+LBL01Titel.Height,100%x-4dip,LBL01Titel.Top+LBL01Titel.Height,Colors.DarkGray,2dip)

   Dim xposline,yposline As Int
   yposline = BTN01Zaehler_Zurueck.Top-((BTN01Zaehler_Zurueck.Top-(SPN01Zaehler.Top+SPN01Zaehler.height))/1.5)
   xposline = (BTN01Zaehler_Neu.Left-BTN01Zaehler_Zurueck.Left-BTN01Zaehler_Zurueck.Width) /2                  'Position Vertikale Trennlinie zwischen buttons
   cnvs.DrawLine(0,yposline,100%x,yposline,Colors.Black,1dip)                                          'Horiz.Linie über buttons zeichnen
   cnvs.DrawLine(BTN01Zaehler_Neu.Left-xposline,yposline,BTN01Zaehler_Neu.Left-xposline,100%y,Colors.Black,1dip)
   cnvs.DrawLine(BTN01Zaehler_loeschen.Left-xposline,yposline,BTN01Zaehler_loeschen.Left-xposline,100%y,Colors.Black,1dip)
   cnvs.DrawLine(BTN01Zaehler_aendern.Left-xposline,yposline,BTN01Zaehler_aendern.Left-xposline,100%y,Colors.Black,1dip)
   cnvs.DrawLine(BTN01Zaehler_pdf.Left-xposline,yposline,BTN01Zaehler_pdf.Left-xposline,100%y,Colors.Black,1dip)
   

   scv01Zaehlerverwaltung.Visible      = True
   scv01Zaehlerverwaltung.Panel.Visible= True
   pnl01scroll.Visible             = True
   CHKbox01Zweitarifzaehler.Enabled   = False

   Zaehlermaske                                                   'Zählermaske der Zählerverwaltung zeigen
End Sub
 

klaus

Expert
Licensed User
Longtime User
Es ist schwehr eine konkrete Aussage mit dem Codeabschnitt zu machen.
Wird die Routine Zaelerverwaltung öfters aufgerufen ?
Wenn ja könntest Du die Canvas ein für alle mal in Activity_Create initialisieren anstatt jedes mal in der Routine.
Sind die Linien immer an der gleichenStelle oder werden die dynamisch geändert je nach den Zusctandsänderungen ?

Beste Grüsse.
 

Paulsche

Well-Known Member
Licensed User
Longtime User
Ja, die Sub mit der Canvas Initialisierung wird jedes mal aufgerufen wenn man in die Zählerverwaltung oder Zählerstandverwaltung geht.
Das "DIM cnvs as canvas" hab ich zum Test mal in Sub Global gemacht,
aber die initialiserung ist direkt in jeder Sub.

Wen nich die Initialisierung nur 1 mal in Activity_Create mache,
dann muss ich praktisch für jede Sub ein eigenes Canvas mit anderem Namen benutzen, wäre aber eine Möglichkeit.

Werde ich mal versuchen.
 

Paulsche

Well-Known Member
Licensed User
Longtime User
Zum Test habe ich jetzt die initialisierungen gleich am Anfang eingefügt,

B4X:
      cnvs02.Initialize(pnl02Zaehlerstaende)
      cnvs11.Initialize(pnl11Stat_JahrAlleVonbis)
      cnvs12.Initialize(pnl12Stat_Monate)
      cnvs04.Initialize(pnl04Tabelle)
      cnvs05.Initialize(pnl05ZstandAendernDetails)
      cnvs03.Initialize(pnl03ZstandEingabe)
      cnvs06.Initialize(pnl06csvImport)
      cnvs01.Initialize(pnl01Zaehlerverwaltung)
      cnvs17.Initialize(pnl17Objektverwaltung)
      cnvs09.Initialize(pnl09staende_aktualisieren)
      cnvs18.Initialize(pnl18BackupRestore)
      cnvs16.Initialize(pnl16MNU_Design)

das scheint aber schon vor dem Startbild den Speicher zu überlasten,
da ja gleich alle Canvas auf einmal initialisert werden, der Fehler " 'APP' angehalten" kommt dann gleich.

Ic hwerd wohl versuchen müssen, ohne Canvas meine Masken darzustellen,
evtl. mit schmalen Panels als Linien oder so .
 

Paulsche

Well-Known Member
Licensed User
Longtime User
so, als Lösung habe ich nun alle canvas mit Drawline gegen
1 Dip schmale Panels im Designerscript ersetzt,
und so die Rahmen um das Layout und Menüleiste gezeichnet.
Klappt wunderbar.

Danke an Klaus für die Tips ! :)
 

arconos

New Member
Licensed User
Longtime User
Eintrag ist ja etwas älter. Aber falls einer darauf stossen sollte.
Bei mir war lag es daran das unter Tools der USB Legacy Debugger aktiviert war. Habe diesen deaktiviert das Programm neu gestartet.
Seltsam, aber froh das es wieder funktionierte....
 
Top