German App wurde beendet

RauchG

Active Member
Licensed User
Hallo zusammen,

ich habe eine sehr umfangreiche app (enws), die manchmal unkontrolliert schließt. In der app ist fast alles drin, was man mit b4a machen kann. Tabellen *.db3, Fotos... Der Fehler taucht nicht immer auf. Mir selbst gelingt es gar nicht diesen Fehler zu produzieren. Bei anderen Usern taucht der Fehler nur sporadisch auf.

"enws wurde beendet".

Wo könnte ich da mit der Fehlersuche beginnen? Kann man in etwa sagen, welche Ereignisse einen solchen Fehler auslösen?

Gruß
RauchG
 

klaus

Expert
Licensed User
Kann man in etwa sagen, welche Ereignisse einen solchen Fehler auslösen?
Meines Wissens nach wenn Speichermangel auftritt, das meistens mit grossen Bitmaps.
Hast Du viele grosse Bilder ?
Man kann den Speicherbedarf von unbenutzten Bitmaps mit diesem Code freigeben:
B4X:
Dim Reflector1 As Reflector
Reflector1.Target=Bitmap1
Reflector1.RunMethod("recycle")
 
Last edited:

RauchG

Active Member
Licensed User
Hallo Klaus,

in der app verwende ich nicht so viele Bitmaps. Ca. 20 kleine png mit insgesamt 50kb als HinweisIcons.

Die User machen allerdings viele Fotos aus der app. In der Regel hat ein jpg ca. 650 kb. Bei einem speziellen Absturz-Fall wurden bis dahin ca. 7 MB Fotos gemacht. Wobei die User die Fotos im Step von 90 Grad drehen können. Das Gerät ist bis zu diesem Zeitpunkt ca. drei Stunden gelaufen. Danach wurden nochmal ca. 7 MB Fotos gemacht ohne Absturz.

Erst mal vielen Dank und ich werde dein Script auf jeden Fall einbauen.

Gruß
RauchG
 

RauchG

Active Member
Licensed User
Hallo zusammen,

möchte kurz schildern, wie ich vorgegangen bin um mein Problem zu lösen. Wobei ich zu wenig von Android verstehe um den Ablauf nachvollziehen zu können bezüglich der Speicherverwaltung.

Der Tip von Klaus hat leider nicht das erwünschte Ergebnis gebracht. Das "recycle" macht bestimmt Sinn, hat aber in meinem speziellen Fall nichts genützt.

Zum Verständnis für die Spezialisten unter euch: Die app wird eingesetzt um im Einzelhandel ca. 10 bis 15 Märkte am Tag zu besuchen. Ca. 300 Märkte stehen als Auswahl zur Verfügung. Wenn man einen Besuch erhebt, werden die Stammdaten/Spezifische Daten vom User auf Stimmigkeit geprüft. Danach werden Produkte erhoben. Z.B. Distribution, Out of Stock, Verkäufe, Ablehnungen, Fotos von den Regalen usw. Es werden 25 Activity's geöffnet und wieder geschlossen. Bei jeder Activity laufen vor dem Verlassen verschiedene SQLite-Update/Insert/Delete/Select ab. Es ist immer nur eine Activity geöffnet. Wenn der Besuch abgeschlossen wird werden in einigen Tabellen noch verschiedene Bit Felder und Date/Time Felder aktualisiert. Dann wird die letzte Activity geschlossen und die Main wieder geöffnet. Die nächste Erhebung beginnt.

Nach ein paar Erhebungen hat sich dann die app dann verabschiedet "app wurde beendet".

Jetzt schließe ich die letzte Activity wie gehabt und rufe die Main nicht mehr auf. Wenn die User einen nächsten Besuch erheben wollen, müssen sie die app neu aufrufen.

Die app stürzt nicht mehr ab. Die User arbeiten mit einem Galaxy Note 3.

Vielleicht nützt das einem von euch. Ich würde gern verstehen was da intern so abläuft.

Gruß
RauchG
 

KMatle

Expert
Licensed User
Meines Wissens nach wenn Speichermangel auftritt, das meistens mit grossen Bitmaps.
Hast Du viele grosse Bilder ?
Man kann den Speicherbedarf von unbenutzten Bitmaps mit diesem Code freigeben:
B4X:
Dim Reflector1 As Reflector
Reflector1.Target=Bitmap1
Reflector1.RunMethod("recycle")
Ich verwende ImageViews und lade viele kleine Bilder per BitmapSample (die IV's werden immer wieder auf einem Scrollview.Panel neu geladen). Bisher keine Probleme, aber wer weiss...

Frage: Wie gehe ich hier genau vor?

Erst Reflector1.Target=Imageview und dann Imageview.RemoveView?
 

klaus

Expert
Licensed User
Entschuldige die etwas späte Antwort, Ich war die ganze Woche abwesend.
Lädst Du die BitmapSamples direkt in die ImageViews oder zuerst in Bitmaps ?
Wenn Du sie zuerst in Bitmaps lädst musst Du deren Speicher frei geben.
Wenn Du sie direkt in die ImageViews lädst könntest Du es mit Reflector1.Target=Imageview.Bitmap versuchen.
Ich selbst habs nicht probiert.
 
Top