0

I have a pretty simple app, just a Button which plays a sound and changes the image if clicked.

I'm getting following crash report but I can't figure out what is causing the crash, is it the sound or the Image?:

java.lang.OutOfMemoryError: 

  at dalvik.system.VMRuntime.newNonMovableArray (Native Method)

  at android.graphics.BitmapFactory.nativeDecodeAsset (Native Method)

  at android.graphics.BitmapFactory.decodeStream (BitmapFactory.java:620)

  at android.graphics.BitmapFactory.decodeResourceStream (BitmapFactory.java:455)

  at android.graphics.drawable.Drawable.createFromResourceStream (Drawable.java:1152)

  at android.content.res.ResourcesImpl.loadDrawableForCookie (ResourcesImpl.java:859)

  at android.content.res.ResourcesImpl.loadDrawable (ResourcesImpl.java:710)

  at android.content.res.Resources.loadDrawable (Resources.java:863)

  at android.content.res.TypedArray.getDrawable (TypedArray.java:928)

  at android.graphics.drawable.StateListDrawable.inflateChildElements (StateListDrawable.java:171)

  at android.graphics.drawable.StateListDrawable.inflate (StateListDrawable.java:116)

  at android.graphics.drawable.DrawableInflater.inflateFromXml (DrawableInflater.java:130)

  at android.graphics.drawable.Drawable.createFromXmlInner (Drawable.java:1224)

  at android.graphics.drawable.Drawable.createFromXml (Drawable.java:1197)

  at android.content.res.ResourcesImpl.loadDrawableForCookie (ResourcesImpl.java:854)

  at android.content.res.ResourcesImpl.loadDrawable (ResourcesImpl.java:710)

  at android.content.res.Resources.loadDrawable (Resources.java:863)

  at android.content.res.TypedArray.getDrawable (TypedArray.java:928)

  at android.view.View.<init> (View.java:4189)

  at android.widget.TextView.<init> (TextView.java:748)

  at android.widget.Button.<init> (Button.java:109)

  at android.widget.Button.<init> (Button.java:105)

  at android.support.v7.widget.AppCompatButton.<init> (AppCompatButton.java:71)

  at android.support.v7.widget.AppCompatButton.<init> (AppCompatButton.java:67)

  at android.support.v7.app.AppCompatViewInflater.createView (AppCompatViewInflater.java:109)

  at android.support.v7.app.AppCompatDelegateImplV9.createView (AppCompatDelegateImplV9.java:1024)

  at android.support.v7.app.AppCompatDelegateImplV9.onCreateView (AppCompatDelegateImplV9.java:1081)

  at android.view.LayoutInflater$FactoryMerger.onCreateView (LayoutInflater.java:192)

  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.inflate (LayoutInflater.java:518)

  at android.view.LayoutInflater.inflate (LayoutInflater.java:426)

  at com.sky.breaker.pressit.tabs.Tab1.onCreateView (Tab1.java:58)

  at android.support.v4.app.Fragment.performCreateView (Fragment.java:2354)

  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1419)

  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.java:1740)

  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1809)

  at android.support.v4.app.BackStackRecord.executeOps (BackStackRecord.java:799)

  at android.support.v4.app.FragmentManagerImpl.executeOps (FragmentManager.java:2580)

  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManager.java:2367)

  at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute (FragmentManager.java:2322)

  at android.support.v4.app.FragmentManagerImpl.execSingleAction (FragmentManager.java:2199)

  at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss (BackStackRecord.java:651)

  at android.support.v4.app.FragmentPagerAdapter.finishUpdate (FragmentPagerAdapter.java:145)

  at android.support.v4.view.ViewPager.populate (ViewPager.java:1236)

  at android.support.v4.view.ViewPager.populate (ViewPager.java:1084)

  at android.support.v4.view.ViewPager.onMeasure (ViewPager.java:1614)

  at android.view.View.measure (View.java:19835)

  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6164)

  at android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1464)

  at android.widget.LinearLayout.measureVertical (LinearLayout.java:758)

  at android.widget.LinearLayout.onMeasure (LinearLayout.java:640)

  at android.view.View.measure (View.java:19835)

  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6164)

  at android.widget.FrameLayout.onMeasure (FrameLayout.java:185)

  at android.view.View.measure (View.java:19835)

  at android.support.v4.widget.DrawerLayout.onMeasure (DrawerLayout.java:1060)

  at android.view.View.measure (View.java:19835)

  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6164)

  at android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1464)

  at android.widget.LinearLayout.measureVertical (LinearLayout.java:758)

  at android.widget.LinearLayout.onMeasure (LinearLayout.java:640)

  at android.view.View.measure (View.java:19835)

  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6164)

  at android.widget.FrameLayout.onMeasure (FrameLayout.java:185)

  at android.support.v7.widget.ContentFrameLayout.onMeasure (ContentFrameLayout.java:139)

  at android.view.View.measure (View.java:19835)

  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6164)

  at android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1464)

  at android.widget.LinearLayout.measureVertical (LinearLayout.java:758)

  at android.widget.LinearLayout.onMeasure (LinearLayout.java:640)

  at android.view.View.measure (View.java:19835)

  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6164)

  at android.widget.FrameLayout.onMeasure (FrameLayout.java:185)

  at android.view.View.measure (View.java:19835)

  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6164)

  at android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1464)

  at android.widget.LinearLayout.measureVertical (LinearLayout.java:758)

  at android.widget.LinearLayout.onMeasure (LinearLayout.java:640)

  at android.view.View.measure (View.java:19835)

  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6164)

  at android.widget.FrameLayout.onMeasure (FrameLayout.java:185)

  at com.android.internal.policy.DecorView.onMeasure (DecorView.java:692)

  at android.view.View.measure (View.java:19835)

  at android.view.ViewRootImpl.performMeasure (ViewRootImpl.java:2351)

  at android.view.ViewRootImpl.measureHierarchy (ViewRootImpl.java:1423)

  at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1672)

  at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1299)

  at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:6558)

  at android.view.Choreographer$CallbackRecord.run (Choreographer.java:871)

  at android.view.Choreographer.doCallbacks (Choreographer.java:683)

  at android.view.Choreographer.doFrame (Choreographer.java:619)

  at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:857)

  at android.os.Handler.handleCallback (Handler.java:751)

  at android.os.Handler.dispatchMessage (Handler.java:95)

  at android.os.Looper.loop (Looper.java:154)

  at android.app.ActivityThread.main (ActivityThread.java:6317)

  at java.lang.reflect.Method.invoke (Native Method)

  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:872)

  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:762)

my fragment java class:

 public class Tab1 extends Fragment {

        ImageView button;
        File directory;
        View layout;
        public static MediaPlayer mp;
        public boolean sound1 = true;
        View view;

        public boolean soundempty;
        AudioManager audioManager;
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.tab1, container, false);


            view = (View)v.findViewById(R.id.activity_main);


            button = (ImageView)v.findViewById(R.id.button);

            button();

            File storage = Environment.getExternalStorageDirectory();
            directory = new File(storage.getAbsolutePath() +"/soundtest/");




            return v;
        }


        public void button(){
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    try{
                        cleanUpMediaPlayer();
                        mp = MediaPlayer.create(getActivity(), R.raw.sound);
                        mp.start();
                        if(!sound1 || !soundempty){
                            mp.setVolume(0.0f, 0.0f);
                        }else{
                            mp.setVolume(1f, 1f);
                        }

                        button.setClickable(false);
                        button.setImageResource(R.drawable.button1);
                        mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                            @Override
                            public void onCompletion(MediaPlayer mediaPlayer) {
                                button.setImageResource(R.drawable.button);
                                button.setClickable(true);
                            }
                        });
                    }catch (Exception e){
                        e.printStackTrace();
                    }


                }
            });
        }




        public static void cleanUpMediaPlayer() {
            if (mp != null) {
                try {
                    mp.stop();
                    mp.release();
                    mp = null;
                } catch (Exception e) {
                    e.printStackTrace();

                }
            }
        }


    }

The Image is only 512x512 and the Sound is also not that big, I already tried to disable the Button for 5 Seconds so no one can spam it. I also clean up MediaPlayer before each click. I'm have no clue of OutOfMemory errors, so I can't tell by my own what is causing the crash.

Thanks for your help.

Fisch Gesicht
  • 81
  • 1
  • 9
  • Possible duplicate of [How to solve java.lang.OutOfMemoryError trouble in Android](https://stackoverflow.com/questions/25719620/how-to-solve-java-lang-outofmemoryerror-trouble-in-android) – olibiaz Aug 16 '19 at 14:15
  • 1
    can you maybe show some code/xml that your using this would help more than the stacktrace because your doing something in your code to get this and its just hard to say what it is – Brent Aug 16 '19 at 14:19
  • It would help if you could post some code. Specifically, I'd be curious about the activity and fragment involved (it looks like you're using fragments), as well as their layouts. You don't have to post the whole files, just the parts relevant to inflating layouts, setting the image, etc... – mtrewartha Aug 16 '19 at 14:20
  • @Brent I edited my question and added my fragment java class. I removed some methods bcause otehrwise it would be too long, I only removed methods which are called by clicking something but the crash appears directly at the app launch. – Fisch Gesicht Aug 16 '19 at 14:40
  • @mtrewartha I edited my question, I didn't post the xml because I think thats not importand (just a RelativeLayout with some ImageViews and Buttons in it) – Fisch Gesicht Aug 16 '19 at 14:41
  • Looks like it's crashing on the `inflater.inflate(R.layout.tab1, container, false)` call. Is that right? If so, it seems the problem might be in your layout or in an image you're referencing in the layout. – mtrewartha Aug 16 '19 at 15:14

1 Answers1

0

Hi (OOM)OutOfMemory can occur for several reasons eg: loading large bitmaps or holding reference of large objects which should've been garbage collected. Now in your code it's hard to determine so i have couple of suggestions which you can use to pinpoint the error

1: Use LeakCanary library it's helps in detecting and fixing Memory leaks which is often the cause of OOM exception

2: you're loading 2 resources why don't you comment the code which loads image and see if OOM occurs this way at least you'll figure out if Image or audio is crashing your app.

Bali
  • 749
  • 6
  • 19