2 Stimmen

Android xml lädt gut in api 8 mit WVGA, aber stürzt mit api 14 mit WXGA720 ab (Tablet)

Das Programm lädt ok, und ich kann durch ein paar Bildschirme gehen, aber wenn die main.xml versucht zu laden, stürzt das Programm nur auf api 14.

logcat-Ausgabe:

04-26 09:02:14.290: E/AndroidRuntime(566): FATAL EXCEPTION: main
04-26 09:02:14.290: E/AndroidRuntime(566): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.surreall.yacht/com.surreall.yacht.yatzee}: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.os.Looper.loop(Looper.java:137)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.ActivityThread.main(ActivityThread.java:4340)
04-26 09:02:14.290: E/AndroidRuntime(566):  at java.lang.reflect.Method.invokeNative(Native Method)
04-26 09:02:14.290: E/AndroidRuntime(566):  at java.lang.reflect.Method.invoke(Method.java:511)
04-26 09:02:14.290: E/AndroidRuntime(566):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-26 09:02:14.290: E/AndroidRuntime(566):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-26 09:02:14.290: E/AndroidRuntime(566):  at dalvik.system.NativeStart.main(Native Method)
04-26 09:02:14.290: E/AndroidRuntime(566): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.createView(LayoutInflater.java:606)
04-26 09:02:14.290: E/AndroidRuntime(566):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
04-26 09:02:14.290: E/AndroidRuntime(566):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.Activity.setContentView(Activity.java:1835)
04-26 09:02:14.290: E/AndroidRuntime(566):  at com.surreall.yacht.yatzee.onCreate(yatzee.java:211)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.Activity.performCreate(Activity.java:4465)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
04-26 09:02:14.290: E/AndroidRuntime(566):  ... 11 more
04-26 09:02:14.290: E/AndroidRuntime(566): Caused by: java.lang.reflect.InvocationTargetException
04-26 09:02:14.290: E/AndroidRuntime(566):  at java.lang.reflect.Constructor.constructNative(Native Method)
04-26 09:02:14.290: E/AndroidRuntime(566):  at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.createView(LayoutInflater.java:586)
04-26 09:02:14.290: E/AndroidRuntime(566):  ... 23 more
04-26 09:02:14.290: E/AndroidRuntime(566): Caused by: java.lang.OutOfMemoryError
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.Bitmap.nativeCreate(Native Method)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.Bitmap.createBitmap(Bitmap.java:605)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.Bitmap.createBitmap(Bitmap.java:551)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:524)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:499)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:351)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.content.res.Resources.loadDrawable(Resources.java:1937)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.View.<init>(View.java:2780)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.ViewGroup.<init>(ViewGroup.java:385)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.widget.LinearLayout.<init>(LinearLayout.java:174)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.widget.LinearLayout.<init>(LinearLayout.java:170)
04-26 09:02:14.290: E/AndroidRuntime(566):  ... 26 more

Ich kann nicht den Inhalt von main.xml aufgrund der 30k Zeichen Frage Grenze auf Stack Overflow posten, und es ist mehr als das. Vorschläge, wo zu beginnen?

2voto

clayton33 Punkte 4086

Ein ähnliches Problem gefunden hier

Anscheinend war dies ein Problem mit der Heap-Größe des Android-Emulators. Ich änderte die "Max VM application heap size" in der AVD für den Emulator, den ich für die API 14 benutzte, von 24 auf 48 und es stürzt nicht mehr ab. Es erklärt immer noch nicht ganz, warum die API von einem Heap von 6mb auf 23,5mb geht, und ich hoffe, dass die Hardware auf den Endbenutzergeräten alle mindestens eine Heapsize von 48mb haben, sonst wird ihre Anwendung abstürzen. für jetzt markiere ich dies als behoben.

1voto

zapl Punkte 61619

Sie versuchen, ein Bild in Ihr Layout zu laden, das zu groß ist. Siehe unten in der Fehlermeldung:

OutOfMemoryError
Resources.loadDrawable()

Sie befindet sich irgendwo innerhalb einer LinearLayout

1voto

android developer Punkte 111449

Nach meiner Erfahrung kann es auch auf einem realen Gerät auftreten - genau die gleiche Out-of-Memory-Ausnahme trat bei mir auf dem Galaxy Nexus auf.

Hier sind mögliche Lösungen:

  1. Wählen Sie die Bilder nach Ihrem Bedarf aus.
  2. im Manifest eine größere Heap-Größe festlegen.
  3. Wenn die Bilder statisch sind, erstellen Sie eine eigene imageView-Alternative, die nur das Bild anzeigt und danach keinen Verweis auf das Bild enthält (oder verwenden Sie stattdessen softreference und einen Builder).
  4. Opengl /ndk oder ein anderes Framework verwenden, das die Heap-Größenbegrenzung umgehen kann.
  5. Speichern Sie auf jeden Fall nicht alle Ihre Bilder. Speichern Sie stattdessen nur die, die Sie gerade brauchen, und der Rest kann in Ihrem Cache bleiben (der LRU-Cache oder Softreference-Cache sein könnte).

0voto

Volnei Klehm Punkte 9

Prüfen Sie, ob das Problem nicht mit der Hardware-Beschleunigung zusammenhängt, die seit API 14 standardmäßig aktiviert ist (weitere Informationen hier):

http://developer.Android.com/guide/topics/graphics/hardware-accel.html

In einer Anwendung, an der ich gearbeitet habe, kam es in einer bestimmten Ansicht zu Abstürzen, die durch die von API 14 aktivierte Hardwarebeschleunigung verursacht wurden. Der obige Link zeigt, wie man sie auf mehreren Ebenen deaktivieren kann. In meinem Fall habe ich sie nur auf Ansichtsebene deaktiviert, da die Deaktivierung für die gesamte Anwendung zu Problemen führt, wenn man versucht, neue Themen zu verwenden (eingeführt seit ICS).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X