簡體   English   中英

運行Android應用程序時發生Intel HAXM和內存不足錯誤

[英]Intel HAXM and Out Of Memory error when running Android application

在Intel HAXM模擬器上運行應用程序時,我們會遇到內存不足錯誤。 同時,當我們在常規的Android ARM仿真器中運行應用程序時,該應用程序是穩定的。 錯誤日志為:

12-03 12:13:20.258: ERROR/AndroidRuntime(3048): FATAL EXCEPTION: main
        java.lang.RuntimeException: Unable to start activity ComponentInfo{coza.sintez.xplat/coza.sintez.xplat.activity.fields.NumberFieldActivity}: android.view.InflateException: Binary XML file line #4: Error inflating class <unknown>
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
        at android.app.ActivityThread.access$1500(ActivityThread.java:117)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:130)
        at android.app.ActivityThread.main(ActivityThread.java:3683)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:507)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: android.view.InflateException: Binary XML file line #4: Error inflating class <unknown>
        at android.view.LayoutInflater.createView(LayoutInflater.java:518)
        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:682)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:619)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
        at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
        at android.app.Activity.setContentView(Activity.java:1657)
        at coza.sintez.xplat.activity.fields.NumberFieldActivity.onCreate(NumberFieldActivity.java:51)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
        ... 11 more
        Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.constructNative(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
        at android.view.LayoutInflater.createView(LayoutInflater.java:505)
        ... 26 more
        Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:460)
        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336)
        at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
        at android.content.res.Resources.loadDrawable(Resources.java:1709)
        at android.content.res.Resources.getDrawable(Resources.java:581)
        at android.graphics.drawable.InsetDrawable.inflate(InsetDrawable.java:103)
        at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
        at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:172)
        at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
        at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
        at android.content.res.Resources.loadDrawable(Resources.java:1694)
        at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
        at android.view.View.<init>(View.java:1951)
        at android.widget.TextView.<init>(TextView.java:350)
        at android.widget.Button.<init>(Button.java:108)
        at android.widget.Button.<init>(Button.java:104)
        ... 29 more
12-03 12:13:20.318: WARN/ActivityManager(851): Force finishing activity coza.sintez.xplat/.activity.fields.NumberFieldActivity 

所有活動均已優化,並且不使用大位圖。 DDMS內存分析器也不會顯示任何內存泄漏。

另外我們還注意到,如果我們第一次運行應用程序,它可以執行某些任務(例如,導航至某些活動)。 但是,如果我們完全重新安裝應用程序並再次運行,它將無法執行相同的任務。 似乎英特爾仿真器無法正確釋放內存。 有人經歷過嗎?

作者:java.lang.OutOfMemoryError:位圖大小超出VM預算,位於

顯然,位圖的大小超出了VM的預算,並且當您第二次運行您的應用時,位圖仍在工廠將實際在VM預算中的映像保留在工廠中。

刪除位圖onDestroy活動

在您的代碼錯誤java.lang.OutOfMemoryError: Bitmap Size Exceeds VM Budget出現

檢查此線程以獲取更多解決方案。

不要為AVD Out of memory不足錯誤而感到驚訝,而不是與其他錯誤無關。

每個AVD都有自己的最大堆內存配置,而您使用Intel仿真器擊中它的原因只是為您的應用程序提供的默認最大堆內存小於ARM仿真器提供的最大堆內存。

您可以使用以下方法檢查應用程序可用的堆內存:

Log.d(TAG,"Heap size: " + Runtime.getRuntime().maxMemory());

盡管您可以控制模擬器中的堆大小並使它在兩個模擬器中運行,但是您不能為用戶設備執行此操作。

因此,如果要拖曳具有較小堆大小的設備,則需要檢查代碼並確保其適合該內存量。 否則,您可以在AndroidManifest.xml指定應用程序所需的最小堆數量,並且只會顯示合適的設備。

問候。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM