【问题标题】:Android app crashes when switching activities切换活动时Android应用程序崩溃
【发布时间】:2016-03-13 20:56:46
【问题描述】:

我正在编写一个 android 应用程序,但遇到了问题。每隔一段时间,当切换活动时,应用程序会在 setContentView 上崩溃。它并不总是在同一个活动上。我得到的错误信息如下:

原因:java.lang.OutOfMemoryError:无法分配 24263724 字节分配,16777216 空闲字节和 22MB 直到 OOM

原因:android.view.InflateException: Binary XML file line #1: Error inflating class

任何帮助将不胜感激。

编辑:每次打开第三个新活动时都会发生这种情况。

这是我的一些代码: 活动一

public void firstroom(View view){
    Intent firstroom=new Intent(this, firstroom.class);
    putextras(firstroom);
    startActivity(firstroom);
}
public void putextras(Intent play){
    play.putExtra("doortoroom2", doortoroom2);
    play.putExtra("doortoroom3", doortoroom3);
    play.putExtra("endlockkey", endlockkey);
    play.putExtra("endlockcombo", endlockcombo);
    play.putExtra("endlockcolor", endlockcolor);
    play.putExtra("havekey", havekey);
    play.putExtra("havecrowbar", havecrowbar);
    play.putExtra("haveflashlight", haveflashlight);
    play.putExtra("keyselected", keyselected);
    play.putExtra("crowbarselected", crowbarselected);
    play.putExtra("flashlightselected", flashlightselected);
}

活动 2

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_firstroom);

XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.mattdevelopment01.mateusz.escaperoom.escaperoom.firstroom"
android:background="@drawable/firstroom">

<Button
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="150dp"
    android:layout_height="200dp"
    android:id="@+id/secondroom"
    android:layout_marginBottom="52dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:background="@android:color/transparent"
    android:onClick="blueroom" />

<Button
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="150dp"
    android:layout_height="200dp"
    android:id="@+id/end"
    android:background="@android:color/transparent"
    android:layout_alignTop="@+id/secondroom"
    android:layout_toRightOf="@+id/secondroom"
    android:layout_toEndOf="@+id/secondroom"
    android:onClick="freedom" />

<Button
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="75dp"
    android:layout_height="35dp"
    android:id="@+id/topdrawer"
    android:layout_marginLeft="73dp"
    android:layout_marginStart="73dp"
    android:layout_marginBottom="37dp"
    android:layout_alignBottom="@+id/end"
    android:layout_toRightOf="@+id/end"
    android:layout_toEndOf="@+id/end"
    android:background="@android:color/transparent"
    android:onClick="topdrawer" />

<Button
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="75dp"
    android:layout_height="35dp"
    android:id="@+id/bottomdrawer"
    android:background="@android:color/transparent"
    android:layout_alignBottom="@+id/end"
    android:layout_alignLeft="@+id/topdrawer"
    android:layout_alignStart="@+id/topdrawer"
    android:onClick="bottomdrawer" />

<Button
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="25dp"
    android:layout_height="25dp"
    android:id="@+id/endkey"
    android:layout_marginLeft="20dp"
    android:layout_marginStart="20dp"
    android:background="@android:color/transparent"
    android:layout_above="@+id/endcombo"
    android:layout_alignLeft="@+id/end"
    android:layout_alignStart="@+id/end"
    android:onClick="endkey" />

<Button
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="50dp"
    android:layout_height="25dp"
    android:id="@+id/endcombo"
    android:background="@android:color/transparent"
    android:layout_above="@+id/endcolor"
    android:layout_alignLeft="@+id/endcolor"
    android:layout_alignStart="@+id/endcolor"
    android:onClick="endcombo" />

<Button
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="50dp"
    android:layout_height="25dp"
    android:id="@+id/endcolor"
    android:background="@android:color/transparent"
    android:layout_alignBottom="@+id/topdrawer"
    android:layout_alignLeft="@+id/endkey"
    android:layout_alignStart="@+id/endkey"
    android:onClick="endcolor" />

<Button
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="50dp"
    android:layout_height="45dp"
    android:id="@+id/key"
    android:layout_marginLeft="51dp"
    android:layout_marginStart="51dp"
    android:background="@drawable/key"
    android:onClick="key"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<Button
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="50dp"
    android:layout_height="45dp"
    android:id="@+id/flashlight"
    android:background="@drawable/flashlight"
    android:onClick="flashlight"
    android:layout_alignParentBottom="true"
    android:layout_toRightOf="@+id/crowbarget"
    android:layout_toEndOf="@+id/crowbarget" />

<Button
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="50dp"
    android:layout_height="45dp"
    android:id="@+id/crowbarget"
    android:background="@drawable/crowbar"
    android:onClick="crowbar"
    android:layout_alignParentBottom="true"
    android:layout_toRightOf="@+id/key"
    android:layout_toEndOf="@+id/key" />

【问题讨论】:

  • 您以某种方式要求系统分配近 2 Gb 的内存。也许某些动态数组太大,这是由错误引起的。如果您无法自己找到解决方案,请显示您的一些代码。
  • 我认为这是一个无限循环案例。请出示您的代码。
  • @drawable/firstroom 位图有多大?您还可以发布崩溃的完整堆栈跟踪吗?
  • 您在打开第三个Activity 时发生的崩溃,不管那是什么,这意味着您的Activity 类可能没有得到正确的垃圾收集。这些崩溃是否也会在配置更改时发生(即连续旋转您的应用程序 3 次)?您的代码中是否对View 对象或Listeners 有任何static 引用?无论如何,调试内存问题通常是相当复杂的。您可以使用Official Docs 中列出的工具来帮助调试。

标签: java android xml android-activity


【解决方案1】:

您可以在 Android 清单中使用 android:largeHeap="true" 请求更大的堆大小

【讨论】:

  • 在这种情况下,这不是一个好主意:"Never request a large heap size simply because you've run out of memory"
  • 这行得通,但更好的解决方案会有所帮助。
  • 请发布堆栈跟踪并描述您通过 putExtra() 添加的对象类型。
  • Ofc 这不是一个好主意,但这是我能说的关于代码的全部内容,没有堆栈跟踪。你的背景有多大?
猜你喜欢
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多