0

I just cant figure out what I am doing wrong. I'm a complete beginner in coding so dont be mad :)

Basically I wanted to do an animated background in my splash screen. But the app stopps working every time I launch it.

Heres the code and error:

Welcome Activity (splash):

public class WelcomeActivity extends AppCompatActivity {

    private static int SPLASH_TIME_OUT = 4000;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);

        android.support.v7.app.ActionBar actionBar = getSupportActionBar();
        actionBar.hide();



        ImageView bgAni = (ImageView) findViewById(R.id.imageBG);
        bgAni.setBackgroundResource(R.drawable.animation_list);

        AnimationDrawable pro = (AnimationDrawable) bgAni.getBackground();
        pro.start();


        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent welcomeIntent = new Intent(WelcomeActivity.this, MainActivity.class);
                startActivity(welcomeIntent);
                finish();
            }
        }, SPLASH_TIME_OUT);

    }
}

Main Activity:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

Welcome XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="de.procre.togetheraware.WelcomeActivity">

    <ImageView
        android:id="@+id/imageBG"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/animation_list"
        android:scaleType="fitXY"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textColor="@color/pure_white"/>


</RelativeLayout>

Animation List:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/anim_background" android:oneshot="true">
    <item android:drawable="@drawable/frame0000" android:duration="30" />
    <item android:drawable="@drawable/frame0001" android:duration="30" />
.
.
.
    <item android:drawable="@drawable/frame0124" android:duration="30" />

</animation-list>

Error Code:

08-18 12:45:41.171 13517-13517/de.procre.togetheraware E/AndroidRuntime: FATAL EXCEPTION: main                                                                        
         Process: de.procre.togetheraware, PID: 13517
         java.lang.OutOfMemoryError: Failed to allocate a 6350412 byte allocation with 4120384 free bytes and 3MB until OOM
         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:1155)
         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:854)
         at android.content.res.TypedArray.getDrawable(TypedArray.java:928)
         at android.graphics.drawable.AnimationDrawable.inflateChildElements(AnimationDrawable.java:327)
         at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:297)
         at android.graphics.drawable.DrawableInflater.inflateFromXml(DrawableInflater.java:130)
         at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1227)
         at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1200)
         at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:715)
         at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)
         at android.content.res.Resources.loadDrawable(Resources.java:854)
         at android.content.res.TypedArray.getDrawable(TypedArray.java:928)
         at android.widget.ImageView.<init>(ImageView.java:157)
         at android.widget.ImageView.<init>(ImageView.java:145)
         at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:60)
         at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:56)
         at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106)
         at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1026)
         at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1083)
         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 android.view.LayoutInflater.inflate(LayoutInflater.java:377)
         at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289)
         at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
         at de.procre.togetheraware.WelcomeActivity.onCreate(WelcomeActivity.java:22)
         at android.app.Activity.performCreate(Activity.java:6662)
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
         at android.app.ActivityThread.-wrap12(ActivityThread.java)
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
         at android.os.Handler.dispatchMessage(Handler.java:102)
         at android.os.Looper.loop(Looper.java:154)
         at android.app.ActivityThread.main(ActivityThread.java:6077)
         at java.lang.reflect.Method.invoke(Native Method)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
Alex Sasha
  • 35
  • 4
  • 2
    The message is pretty clear: `OutOfMemoryError: Failed to allocate a 6350412 byte allocation`. Your Image is too big – Jens Aug 18 '17 at 11:01

4 Answers4

2

Here you run out of memory the application can't allocate the necessary memory there is a solution for that you can put this line at your manifest in application tag

android:largeHeap="true"
AskNilesh
  • 67,701
  • 16
  • 123
  • 163
Ahmed Abdelmeged
  • 2,299
  • 2
  • 18
  • 29
2

try these make make android:hardwareAccelerated="false" and android:largeHeap="true" in application tag of manifiest file like this

<application
 android:largeHeap="true"
 android:hardwareAccelerated="false">
AskNilesh
  • 67,701
  • 16
  • 123
  • 163
0

In your manifest, under application include the following:

<application
    ...
    ..
    .
    android:allowBackup="true"
    android:hardwareAccelerated="false"
    android:largeHeap="true"
    android:supportsRtl="true"
    .
    ..
    ...>

And take off the finish(); you use after calling the intent.

vss
  • 1,093
  • 1
  • 20
  • 33
0

In your <animation-list .......... </animation-list> you are animating with 124 drawables , This will definitely cause out of memory Exception even if you add largeheap, This is not good practise . refer here this library for creating animated splash .... or choose other alternatives

Omar Dhanish
  • 885
  • 7
  • 18