应用程序崩溃无缘无故

时间:2016-03-04 15:06:33

标签: java android

所以我正在为Android编写应用程序,并在我的设备上测试它(s4 mini -KitKat)后它运行正常。然后我让其他人在他们的手机上测试它,应用程序崩溃没有明显的原因。该应用程序在Android版本上崩溃: -果冻豆 -棒糖 -Marshmallow 这是logcat:

03-04 16:45:13.310 5415-5415/com.edpack.easyedit E/art: Throwing OutOfMemoryError "Failed to allocate a 60652956 byte allocation with 4194304 free bytes and 5MB until OOM"
03-04 16:45:13.310 5415-5415/com.edpack.easyedit E/AndroidRuntime: FATAL EXCEPTION: main
                                                                   Process: com.edpack.easyedit, PID: 5415
                                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.edpack.easyedit/com.edpack.easyedit.EditorActivity}: android.view.InflateException: Binary XML file line #2: 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:5254)
                                                                       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 #2: 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 android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256)
                                                                       at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
                                                                       at com.edpack.easyedit.EditorActivity.onCreate(EditorActivity.java:54)
                                                                       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:5254) 
                                                                       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 android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256) 
                                                                       at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109) 
                                                                       at com.edpack.easyedit.EditorActivity.onCreate(EditorActivity.java:54) 
                                                                       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:5254) 
                                                                       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 60652956 byte allocation with 4194304 free bytes and 5MB 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.FrameLayout.<init>(FrameLayout.java:115)
                                                                       at android.widget.FrameLayout.<init>(FrameLayout.java:111)
                                                                       at android.widget.FrameLayout.<init>(FrameLayout.java:107)
                                                                       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 android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256) 
                                                                       at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109) 
                                                                       at com.edpack.easyedit.EditorActivity.onCreate(EditorActivity.java:54) 
                                                                       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:5254) 
                                                                       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) 

这是OnCreate方法,它似乎是原因:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_editor);
        mImageView = (ImageView) (findViewById(R.id.picV));
        cropView = (CropImageView) findViewById(R.id.CropImageView);
        Intent editor = getIntent();
        mImagePath = editor.getExtras().getString("PATH");
        setPic(mImagePath);
        effectsMenu();
        cropAdjust();
        colorAdjust();
        roundAdjust();
        contrastAdjust();
        brightnessAdjust();
        filterBar();
    }

似乎问题是我使用的布局,因为它说它试图分配大约60mb。布局本身是20kb,我使用的图像总共大约1.2mb。

2 个答案:

答案 0 :(得分:4)

这不是没有理由,它告诉你它的内存不足。您正在onCreate中进行大量图像编辑操作(活动的设置阶段)。

您需要确保

  • 您正在操作的图像大小合理
  • 您可以在每个步骤之间清理并释放尽可能多的内存
  • 使用您在此处和其他地方保留的内容不会造成任何内存泄漏

答案 1 :(得分:1)

问题在于我在布局中使用的drawables。它们都位于drawable文件夹中,并且与低分辨率设备配合良好。我没有任何其他文件夹来支持hdpi,'xhdpi'等等。所以当我在更高分辨率的设备上运行应用程序时,它试图扩展所有消耗大量内存并且基本上导致的内容崩溃。