Probleme mit App auf Galaxy S3?

bruce85

Bekanntes Mitglied
Hallo,
ich habe in java-Android ein Spiel geschrieben und es läuft auf mein Galaxy Ace problemlos.
Jetzt habe ich das Spiel mal auf Galaxy S3 getestet und es wird beim Starten des Spiels angehalten.

Eclipse meldet folgendes:
Java:
01-06 18:44:26.950: E/AndroidRuntime(26755): FATAL EXCEPTION: main
01-06 18:44:26.950: E/AndroidRuntime(26755): java.lang.OutOfMemoryError
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.graphics.Bitmap.nativeCreate(Native Method)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.graphics.Bitmap.createBitmap(Bitmap.java:640)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.graphics.Bitmap.createBitmap(Bitmap.java:586)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:466)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at eu.falko.blocks3d.MenuActivity.onCreate(MenuActivity.java:198)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.app.Activity.performCreate(Activity.java:5184)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.app.ActivityThread.access$600(ActivityThread.java:140)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.os.Handler.dispatchMessage(Handler.java:99)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.os.Looper.loop(Looper.java:137)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.app.ActivityThread.main(ActivityThread.java:4898)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at java.lang.reflect.Method.invokeNative(Native Method)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at java.lang.reflect.Method.invoke(Method.java:511)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at dalvik.system.NativeStart.main(Native Method)

Es liegt an dieser Zeile:
Java:
try {
			String str=null;

			InputStream is = getResources().openRawResource(R.drawable.maps);
			
	        BufferedReader r = new BufferedReader(new InputStreamReader(is,"ISO-8859-1"));
	        String zeile;
	        while ((zeile = r.readLine()) != null) {
..............................................................

Die Datei Map kann wahrscheinlich nicht geladen werden, aber auf mein Galaxy Ace funktioniert es ohne probleme.

Die Bilder lade ich ja auch aus dem res Ordner und es funtioniert:
background = BitmapFactory.decodeResource(getResources(),R.drawable.background);

Nur bei Galaxy S3 meckert er, wenn ich ein InputStream lade, woran könnte das Problem denn liegen?
Gibt es Vielleicht eine andere möglichkeit, das es auch bei Galaxy S3 funktioniert?

Ich bedanke mich schonmal im Voraus.

MfG
 

Network

Top Contributor
Eclipse meldet folgendes:
Java:
01-06 18:44:26.950: E/AndroidRuntime(26755): FATAL EXCEPTION: main
01-06 18:44:26.950: E/AndroidRuntime(26755): java.lang.[COLOR="Red"]OutOfMemoryError[/COLOR]
01-06 18:44:26.950: E/AndroidRuntime(26755): 	at android.graphics.Bitmap.nativeCreate(Native Method)
[/QUOTE]

Wenn du OpenGL ES verwendest kannst du nach dem Laden der Bitmap in OpenGL bitmap.recycle() aufrufen. Das sollte den Arbeitsspeicher wieder entlasten.
Aber ich denke es sollte klar sein, dass wenn du zuviele Daten in den Arbeitsspeicher legst diese irgendwann kein Platz mehr hat. Da helfen keine kleinen Tricks im Code sondern nur effizientes Ressourcenmanagement.

Gruß
Net
 

bruce85

Bekanntes Mitglied
Danke Dir.

Ich benutze kein OpenGL ES.

Wieso funktioniert das Spiel dann auf Galaxy Ace?

Die Bilder können ja alle geladen werden, nur wenn ich die Map.txt lade, dann wird die App einfach angehalten.

Gibt es keine andere möglichkeit eine Textdatei erfolgreich zu laden?

MfG
 

schlingel

Gesperrter Benutzer
Ein einziger Tropfen Wasser kann ein Fass auch zum Überlaufen bringen, so ist es jetzt auch bei dir.

Kann es sein, dass du zufälligerweise an hdpi oder xhdpi angepasste Grafiken verwendest? Wenn die zu groß sind bzw. so groß das dann das Text-File zusätzlich, zu viel Speicher verbrauchen stürzt das ganze mit einem OutOfMemory Error ab.

Am besten ist, wenn du mit einem Memory Tracer mal reinschaust woran es wirklich liegt. Ich hab zu dem Thema mal einen Artikel geschrieben, vielleicht hilft er dir.
 

bruce85

Bekanntes Mitglied
Ich danke Dir.

Ich hab nebenbei noch mal gegoogelt und habe gelesen, das Skalieren der Bitmaps viel speicher brauchen, stimmt das?

In meinem Spiel Skalieren ich einige Bitmaps, die ich auf die gewünschte Bildschirmgröße anpasse.
Jetzt weiss ich nicht, ob es daran liegen könnte.

Was meint Ihr?

MfG
 

schlingel

Gesperrter Benutzer
Ja das stimmt. Zu dem Thema wurde bei der Google IO 2009 etwas gesagt.

Zusammengefasst läuft es darauf hinaus, dass du ein Grafikset verwendest, dies auf eine Bitmap zeichnest und dann dieses Bitmap an die jeweilige Screen-Größe angepasst skaliert zeichnest.

Das hat gleich 3 Vorteile:
1. Nur ein statt 4 Grafik-Sets
2. Nur eine Skalierung
3. Du kommst auch mit obskuren bzw. unüblichen Auflösungen zurecht.
 

bruce85

Bekanntes Mitglied
Vielen Dank.

Noch eine Frage:
Könnte es auch Vielleicht daran liegen, das ich die Bilder und Dateien nur im Ordner drawable-ldpi habe?
Oder muss ich in den anderen 3 Ordners die Bilder auch einfügen?

Ich dachte mir das so, wenn er die Bilder für die bestimmte größe nicht findet, das er die dann aus diesen Ordner drawable-ldpi nimmt.

Danke schonmal.

MfG
 

bruce85

Bekanntes Mitglied
Danke Dir.

Ich werde die ganzen Bilder jetzt dementsprechend mit Photoshop verkleinern bzw. vergrößern für die jeweilige Bildschirmgröße, um mehr Speicher zu sparen.

MfG
 

schlingel

Gesperrter Benutzer
Hä? Du sollst genau nicht für jede Screen-Auflösung eigene Bilder erstellen sondern das im Code machen.

Du zeichnest dann in ein Bitmap-Canvas, das resultierende Bitmap skalierst du auf den tatsächlichen Bildschirm und zeichnest das dann. Hast du dir das Video angeschaut?
 

bruce85

Bekanntes Mitglied
Hä?
Hatte ich doch erst gehabt und es hatte auf mein Galaxy S5363 und Galaxy S5830i problemlos funktioniert, bis ich es auf Galaxy S3 getestet hatte, da geht garnix, angeblich Außerhalb des Speichers etc.

Grade bei ältere Handys hätte ich mir das vorstellen können, das es nicht geht, aber doch nicht bei Galaxy S3 das es dort einfach nicht geht, obwohl das viel schneller sein sollte aber doch Probleme macht.

Mir bleibt keine andere Wahl, außer die Bilder zu bearbeiten für die 4 Drawable:
drawable-hdpi
drawable-ldpi
drawable-mdpi
drawable-xhdpi

Edit: Achso, jetzt hab ich es verstanden, auf ein Bitmap Canvas zeichne ich meine Bitmaps und diese Bitmap Canvas skalliere ich dann einfach auf die tatsächliche Bildschirmgröße.
Ich werde es später mal testen und vielen Dank für die Hilfe.

MfG
 
Zuletzt bearbeitet:

Network

Top Contributor
"Obwohl das viel schneller sein sollte..."
Du vergleichst dein Galaxy S3 mit einem Galaxy Ace?

Das Ace hat eine Bildschirmauflösung von 320x480
Das GS3 hat eine Bildschirmauflösung von 1.280x720
Das ist ein 1280/320 * 720/480 = ~8 mal größerer Bildschirm.

Das Ace hat einen Arbeitsspeicher von 384 MB
Das GS3 hat einen Arbeitsspeicher von 1024 MB
Das ist ein 1024 / 384 = ~2,6 mal größerer Arbeitsspeicher
(Abgezogen muss eigentlich noch der größere RAM-Verbrauch der GS3 Androidversion)

Mit anderen Worten, das Ace hat in Relation zur Bildschirmgröße einen größeren Arbeitsspeicher als das GS3, es kann also mehr Bilder auf die Bildschirmgröße skalieren.

Gruß
Net
 

bruce85

Bekanntes Mitglied
Vielen Dank für die information.

Da gibts aber noch ein Problem:
Wenn ich ein Bitmap Canvas verkleiner dann stimmen die berechnungen der einzelnen Bitmaps nicht mehr überein.
Das Problem hatte ich damals, z.B. habe ich eine Tile Map mit Mausberechnungen und diese berechne ich ja z.B. über die einzelne Bitmaps (breite und höhe), wenn ich dann nur das Bitmap Canvas an die Bildschörmgröße anpasse, bekomme ich dann auch die (breite und höhe) in Pixel von den einzelnen Bitmaps, die in ein Bitmap Canvas liegen?

MfG
 

schlingel

Gesperrter Benutzer
Schau dir die Talks an von dem Typen den ich oben verlinkt habe. Der behandelt das entweder in seinem Talk 09, 10 oder 11 und erklärt das sehr gut.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Android Probleme mit BLE-Notify Android & Cross-Platform Mobile Apps 2
J Android Probleme mit der Realm Datenbank Android & Cross-Platform Mobile Apps 3
J Android Probleme mit Navigation-Fragments? Android & Cross-Platform Mobile Apps 0
N Probleme mit custom dynamic ListView Android & Cross-Platform Mobile Apps 15
B Android Probleme mit Android Studio Android & Cross-Platform Mobile Apps 6
B Android Probleme mit Realm Datenbank Android & Cross-Platform Mobile Apps 2
B Android Probleme mit ArrayList Android & Cross-Platform Mobile Apps 6
J Android Probleme mit FileProvider Android & Cross-Platform Mobile Apps 1
B Probleme mit Firebase Authentication Android & Cross-Platform Mobile Apps 25
H Android Probleme mit SearchView in ArrayAdapter Android & Cross-Platform Mobile Apps 7
ATZENPOWER Android Probleme mit mobilen Daten via lte Android & Cross-Platform Mobile Apps 10
S Android Probleme beim Verbinden mit einer HTTPS Seite Android & Cross-Platform Mobile Apps 4
B Android Probleme mit RealmObject? Android & Cross-Platform Mobile Apps 1
M Android ExpandableListView merkwürdige Probleme Android & Cross-Platform Mobile Apps 20
F Probleme mit Google-Maps Android & Cross-Platform Mobile Apps 0
B Android Probleme mit ViewPager? Android & Cross-Platform Mobile Apps 5
J Probleme mit ViewPager und Activity Android & Cross-Platform Mobile Apps 1
B Android Probleme mit Eclipse? Android & Cross-Platform Mobile Apps 6
E MAVLINK Probleme Android & Cross-Platform Mobile Apps 1
C Android Probleme mit JavaMail Android & Cross-Platform Mobile Apps 5
B Android Probleme mit Facebook-SDK? Android & Cross-Platform Mobile Apps 1
D Android Probleme mit info/warning (1, 902) Android & Cross-Platform Mobile Apps 4
D Android Gallery Probleme Android & Cross-Platform Mobile Apps 3
S Hat der AVD-Manager Probleme mit GPS? Android & Cross-Platform Mobile Apps 5
P Probleme mit xml-Layout Android & Cross-Platform Mobile Apps 2
P Android Probleme mit Spinner Android & Cross-Platform Mobile Apps 3
F Layout mit listViews (Scrolling-Probleme) Android & Cross-Platform Mobile Apps 2
A Android Probleme mit Dialog Android & Cross-Platform Mobile Apps 4
U SQLite-Datenbank Probleme Android & Cross-Platform Mobile Apps 8
T Android Probleme bei Facebook Integration Android & Cross-Platform Mobile Apps 5
tfa Android Layout-Probleme: View programmatisch erweitern (addContentView) Android & Cross-Platform Mobile Apps 7
A Probleme mit ListView / ArrayAdapter Android & Cross-Platform Mobile Apps 3
A Probleme mit Form.isShown Android & Cross-Platform Mobile Apps 9
A Probleme mit Calendar auf dem Handy Android & Cross-Platform Mobile Apps 3
U Probleme mit der drawString Methode bei Canvas Android & Cross-Platform Mobile Apps 8
P Probleme mit dem Deployment Android & Cross-Platform Mobile Apps 3
P Probleme mit Streams Android & Cross-Platform Mobile Apps 4
C 2 kleine Probleme (Datei lesen, String durchsuchen) Android & Cross-Platform Mobile Apps 16
G Proguard Obfuscator macht Probleme Android & Cross-Platform Mobile Apps 2
P Probleme mit RMS Android & Cross-Platform Mobile Apps 5
C Android Galaxy S2 Touch Taste Android & Cross-Platform Mobile Apps 2
S Android Fehler beim Anzeigen meines Apps auf Galaxy Tab Android & Cross-Platform Mobile Apps 4

Ähnliche Java Themen

Neue Themen


Oben