android - Activity 在 setContentView() 中崩溃,布局有问题吗?

标签 android xml android-layout

我正在创建一个新菜单,该菜单会在我的玩家死亡时出现。该 Activity 未加载,应用程序在下面指定的行崩溃。我的所有其他 Activity 都运行良好,我尽我所能地尝试进行其他 Activity ,但仍然无法正常工作。

Activity 类:

public class DeathScreen extends Activity implements OnClickListener {
    //define buttons
    private Button btn_replay;
    private Button btn_menu;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Hide title
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        //Hide top bar
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.deathscreen);

        btn_replay = findViewById(R.id.btn_replay);
        btn_menu = findViewById(R.id.btn_menu);
    }

    //invoke callback event in view
    @Override
    public void onClick(View v) {
        Intent intent = new Intent();

        switch (v.getId())
        {
        case R.id.btn_replay:
            intent.setClass(this, GamePage.class);
            break;

        case R.id.btn_menu:
            intent.setClass(this, Mainmenu.class);
            break;
        }

        startActivity(intent);
    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

日志:

 projectname.companyname.com.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
 Process: projectname.companyname.com.myapplication, PID: 12025
 java.lang.RuntimeException: Unable to start activity ComponentInfo{projectname.companyname.com.myapplication/projectname.companyname.com.myapplication.DeathScreen}: android.view.InflateException: Binary XML file line #0: Error inflating class <unknown>
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
      at android.app.ActivityThread.access$800(ActivityThread.java:151)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loop(Looper.java:135)
      at android.app.ActivityThread.main(ActivityThread.java:5258)
      at java.lang.reflect.Method.invoke(Native Method)
      at java.lang.reflect.Method.invoke(Method.java:372)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
 Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class <unknown>
      at android.view.LayoutInflater.createView(LayoutInflater.java:633)
      at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
      at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
      at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378)
      at android.app.Activity.setContentView(Activity.java:2145)
      at projectname.companyname.com.myapplication.DeathScreen.onCreate(DeathScreen.java:29)
      at android.app.Activity.performCreate(Activity.java:5990)
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5258) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
 Caused by: java.lang.reflect.InvocationTargetException
      at java.lang.reflect.Constructor.newInstance(Native Method)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
      at android.view.LayoutInflater.createView(LayoutInflater.java:607)
      at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
      at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:482) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
      at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378) 
      at android.app.Activity.setContentView(Activity.java:2145) 
      at projectname.companyname.com.myapplication.DeathScreen.onCreate(DeathScreen.java:29) 
      at android.app.Activity.performCreate(Activity.java:5990) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5258) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
 Caused by: java.lang.OutOfMemoryError: Failed to allocate a 58286092 byte allocation with 16777168 free bytes and 52MB until OOM
      at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
      at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
      at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
      at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
      at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:988)
      at android.content.res.Resources.loadDrawableForCookie(Resources.java:2474)
      at android.content.res.Resources.loadDrawable(Resources.java:2381)
      at android.content.res.TypedArray.getDrawable(TypedArray.java:749)
      at android.view.View.<init>(View.java:3737)
      at android.view.ViewGroup.<init>(ViewGroup.java:497)
      at android.widget.RelativeLayout.<init>(RelativeLayout.java:248)
      at android.widget.RelativeLayout.<init>(RelativeLayout.java:244)
      at android.widget.RelativeLayout.<init>(RelativeLayout.java:240)
      at java.lang.reflect.Constructor.newInstance(Native Method) 
      at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
      at android.view.LayoutInflater.createView(LayoutInflater.java:607) 
      at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
      at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:482) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
      at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378) 
      at android.app.Activity.setContentView(Activity.java:2145) 
      at projectname.companyname.com.myapplication.DeathScreen.onCreate(DeathScreen.java:29) 
      at android.app.Activity.performCreate(Activity.java:5990) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5258) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

xml:

<?xml version="1.0" encoding="utf-8"?>
<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:background="@drawable/death_screen"
    tools:context="projectname.companyname.com.myapplication.DeathScreen">

    <Button
       android:id="@+id/btn_replay"
       android:layout_width="150dip"
       android:layout_height="40dip"
       android:layout_alignParentBottom="true"
       android:layout_marginBottom="150dip"
       android:layout_centerHorizontal="true"
       android:onClick="onClick"
       android:background="@drawable/replay_button" />

   <Button
       android:id="@+id/btn_menu"
       android:layout_width="150dip"
       android:layout_height="40dip"
       android:layout_alignParentBottom="true"
       android:layout_marginBottom="100dip"
       android:layout_centerHorizontal="true"
       android:onClick="onClick"
       android:background="@drawable/mainmenu_button" />

</RelativeLayout>

如果能给我指明正确方向的任何帮助或提示,我们将不胜感激!谢谢

最佳答案

在堆栈跟踪中,原始问题是

Caused by: java.lang.OutOfMemoryError: Failed to allocate a 58286092 byte allocation with 16777168 free bytes and 52MB until OOM

这听起来像是一张太大的图片,您的设备没有足够的内存来创建它。尝试从您的 Activity 布局的 Root View 中删除这一行:

android:background="@drawable/death_screen"

如果你删除这个属性后能成功运行应用,你就知道问题出在这张图片太耗内存了。那时,这个站点上有大量关于图像 + 内存消耗的问题/答案。

关于android - Activity 在 setContentView() 中崩溃,布局有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48527993/

相关文章:

android - 如何使用 Delphi 检测 Android 中的虚拟键盘事件

c# - Xml 节点的 Xml 后代

android - 在 RelativeLayout 中居中 textView

android - Android 如何处理 subview 中触摸点的转换?

java - 我如何结合 Relative 和 Linear 来实现这个 XML?

java - 如何将hashmap中的数据从json获取到适配器中?

android - 在 Android 中使用 Looper.prepare() 的细节

android - cordova 蓝牙音箱没有声音

java - 最佳实践 : Java/XML serialization: how to determine to what class to deserialize?

xml - 复制 xslt 应用模板中不存在的剩余元素