【问题标题】:Fatal Exception: java.lang.OutOfMemoryError致命异常:java.lang.OutOfMemoryError
【发布时间】:2020-10-01 21:23:03
【问题描述】:

我有这个错误: 致命异常:java.lang.OutOfMemoryError 无法分配 8640012 字节分配,其中 6781976 可用字节和 6MB 直到 OOM com.olgazelenko.esofer.AlegeTestulB.onCreate

我尝试通过添加:android:largeHeap="true" 来修复它,但我仍然收到错误。

有堆栈跟踪:

Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 8640012 byte allocation with 6781976 free bytes and 6MB until OOM
   at dalvik.system.VMRuntime.newNonMovableArray(VMRuntime.java)
   at android.graphics.BitmapFactory.nativeDecodeAsset(BitmapFactory.java)
   at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:655)
   at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:483)
   at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1157)
   at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720)
   at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)
   at android.content.res.Resources.loadDrawable(Resources.java:972)
   at android.content.res.TypedArray.getDrawable(TypedArray.java:935)
   at android.view.View.<init>(View.java:4232)
   at android.widget.TextView.<init>(TextView.java:733)
   at android.widget.Button.<init>(Button.java:109)
   at android.widget.Button.<init>(Button.java:105)
   at androidx.appcompat.widget.AppCompatButton.<init>(AppCompatButton.java:71)
   at androidx.appcompat.widget.AppCompatButton.<init>(AppCompatButton.java:67)
   at androidx.appcompat.app.AppCompatViewInflater.createButton(AppCompatViewInflater.java:187)
   at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:110)
   at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1266)
   at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1316)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
   at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
   at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
   at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
   at com.olgazelenko.esofer.AlegeTestulB.onCreate(AlegeTestulB.java:52)
   at android.app.Activity.performCreate(Activity.java:6666)
   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)
   at android.app.ActivityThread.-wrap12(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)
   at android.os.Handler.dispatchMessage(Handler.java:110)
   at android.os.Looper.loop(Looper.java:203)
   at android.app.ActivityThread.main(ActivityThread.java:6251)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)

有人知道如何解决吗?提前致谢

【问题讨论】:

  • 贴出使用过的代码。
  • 您要加载大图吗?可能是它太大而无法加载到内存中
  • @rexxar 我压缩了图像.. 我认为这是同一件事,图像太大了。我该怎么办?
  • 这应该使您的代码更具可读性...pastebin.com/UVYckfdn

标签: java android


【解决方案1】:

此答案基于您的 XML 中的布局:https://pastebin.com/5AUKpCnn

 <ScrollView
        android:id="@+id/ScrollView01"
    ...
    <Button...
    <Button...
    <Button...
    ...
 </ScrollView>

您似乎正在尝试使用 ScrollView 和许多按钮来创建列表。 创建这样的列表会一次加载所有图像。

您应该查看 Android 的 ListView 或 RecyclerView 以创建可点击图像列表。这两个可以让您更轻松地处理列表项,以便它们不会同时加载。

【讨论】:

  • 我正在努力 rn,当我看到它是否有效时我会接受它,提前谢谢队友!
猜你喜欢
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
相关资源
最近更新 更多