破坏特定活动时释放内存

我有一个启动器Activity ,它在打开时加载并调整大位图的大小,因为它是背景。

无论什么时候点击后退按钮, Activitydestroyed 。 但我认为内存还没有发布。

当我打开应用程序时,点击后退按钮并重复打开(重复),我将得到一个OutOfMemoryError

我很抱歉这个新手问题,但我想知道如何释放内存,每当一个Activitydestroyed

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

    //MARK - movingBackgroundImageView
    movingBackgroundImageView = (ImageView) findViewById(R.id.movingBackgroundImageView);
    movingBackgroundImageView.setColorFilter(Color.argb(255, 255, 255, 255));
    movingBackgroundImageView.setScaleType(ImageView.ScaleType.MATRIX);
    movingBackgroundImageView.setAlpha(0.28f);

    prepareBackgroundAnimation();
}

private void prepareBackgroundAnimation() {

    DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);

    screenWidth = displaymetrics.widthPixels;
    screenHeight = displaymetrics.heightPixels;

    movingImageHeight = displaymetrics.heightPixels;
    movingImageWidth = 1920.0 / 1080.0 * movingImageHeight;

    bitmapImage = BitmapFactory.decodeResource(this.getResources(), R.drawable.moving_background_image);
    scaledBitmap = bitmapImage.createScaledBitmap(bitmapImage, (int) movingImageWidth, (int) movingImageHeight, false);
    movingBackgroundImageView.setImageBitmap(scaledBitmap);

    backgroundImageInBeginning = true;

    movingBackgroundImageView.post(new Runnable() {
        @Override
        public void run() {
            movingBackgroundImageView.setImageMatrix(matrix);
            moveBackground();
        }
    });
}

12-22 13:44:49.549 30885-30885 /? E / AndroidRuntime:致命异常:主要过程:id.testingapp.android.TestingApp,PID:30885 java.lang.OutOfMemoryError:无法分配与14018312个自由字节26211852字节分配和13MB直到dalvik.system.VMRuntime.newNonMovableArray OOM (本机方法)在android.graphics.Bitmap.nativeCreate(本机方法)在android.graphics.Bitmap.createBitmap(Bitmap.java:939)在android.graphics.Bitmap.createBitmap(Bitmap.java:912)在android.graphics .Bitmap.createBitmap(Bitmap.java:843)在android.graphics.Bitmap.createScaledBitmap(Bitmap.java:719)在id.testingapp.android.TestingApp.WelcomeActivity.prepareBackgroundAnimation(WelcomeActivity.java:140)在id.TestingApp。 android.TestingApp.WelcomeActivity.onCreate(WelcomeActivity.java:72)在android.app.Activity.performCreate(Activity.java:6283)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)在android.app.ActivityThread .performLaunchActivity(ActivityThread.java:2646)at android.app.ActivityThread.ha ndleLaunchActivity(ActivityThread.java:2758)在android.app.ActivityThread.access $ 900(ActivityThread.java:177)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1448)在android.os.Handler.dispatchMessage( Handler.java:102)at android.os.Looper.loop(Looper.java:145)at android.app.ActivityThread.main(ActivityThread.java:5942)at java.lang.reflect.Method.invoke(Native Method)在java.lang.reflect.Method.invoke(Method.java:372)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1400)在com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1195)

编辑:

我试图把所有这些放在onDestroyed()但问题仍然存在

@Override
protected void onDestroy() {
    finish();
    bitmapImage = null;
    scaledBitmap = null;
    super.onDestroy();
    Runtime.getRuntime().gc();
    System.gc();
}

为它添加以下代码

@Override
protected void onDestroy() {
    //android.os.Process.killProcess(android.os.Process.myPid());

    super.onDestroy();
    if(scaledBitmap!=null)
            {
                scaledBitmap.recycle();
                scaledBitmap=null;
            }

     }

在活动中,如果您调用finish()方法将被销毁,并且其所有资源都将排队等待垃圾回收。

因此, 此活动使用的所有内存将在下一个GC周期中释放

要么

你可以试试这个清理内存,

@Override
public void onDestroy() {
    super.onDestroy();
    Runtime.getRuntime().gc();      
}

检查这个细节。 希望有所帮助。


尝试在活动被销毁时将位图设置为null,并且如果愿望运行垃圾收集器。

链接地址: http://www.djcxy.com/p/33659.html

上一篇: Release Memory of Particular Activity when it is Destroyed

下一篇: java.lang.out of memory error Android Bitmap Factory