在加载Drawable时出现newNonMovableArray内存不足错误



我有一个奇怪的(对我来说)' Out of memory ';在我的应用程序错误:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: de.fhkiel.socialrobotcms, PID: 5029
java.lang.OutOfMemoryError: Failed to allocate a 136887708 byte allocation with 3292628 free bytes and 123MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:651)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:486)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1085)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2867)
at android.content.res.Resources.loadDrawable(Resources.java:2756)
at android.content.res.TypedArray.getDrawable(TypedArray.java:870)
at android.widget.ImageView.<init>(ImageView.java:152)
at android.widget.ImageView.<init>(ImageView.java:140)
at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:78)
at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:73)
at androidx.appcompat.app.AppCompatViewInflater.createImageView(AppCompatViewInflater.java:206)
at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:125)
at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1566)
at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1617)
at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:189)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:746)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at androidx.fragment.app.Fragment.onCreateView(Fragment.java:1968)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2995)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:523)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:113)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1374)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2841)
at androidx.fragment.app.FragmentManager.dispatchViewCreated(FragmentManager.java:2777)
at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3020)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:551)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:113)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1374)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2841)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2784)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:262)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:478)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:246)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1245)
at android.app.Activity.performStart(Activity.java:6355)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2540)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1499)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5875)
at jav

在这里日志结束。对我来说,如果系统加载一个可绘制的资源,错误似乎会发生。但除了160kb的大png,我们只有矢量资产。

即使这个错误也只发生在真实设备上,而不是在具有相同规格的模拟器中。还有大约350MB的可用内存。而

android:largeHeap="true"

选项修复了问题(丑陋的方式),它似乎与堆上的某些东西有关。因此,如果没有,错误也会发生。只显示一个空片段。

有什么办法能更深入地研究这个问题吗?致以最亲切的问候。

感谢@Umesh提醒我关于工作解决方案的问题:

Android: . lang。OutOfMemoryError:分配23970828字节分配失败,2097152空闲字节和2MB直到OOM

虽然我没有使用位图,但所有二进制图形必须包含在draw_xhdpi/目录(或更大)中。因此,尽管我没有加载aný位图数据(作为一种bmp文件),但UI加载了一个二进制图像。因此,必须将其放入正确的目录中,这取决于它的大小(其中二进制图像总是xhdpi或更大)。

相关内容

  • 没有找到相关文章

最新更新