Speicher freigeben von Bestimmten Aktivität, wenn es Zerstört wird

Ich habe einen launcher Activity laden und die Größe von großen bitmap-wie es den hintergrund, wenn es geöffnet wird.

Wenn die Schaltfläche " zurück, die Activity ist destroyed. Aber ich denke, der Speicher ist noch nicht freigegeben.

Wenn ich wieder öffnen Sie die app, drücken Sie die zurück-Taste und öffnen Sie es erneut (wiederholt), bekomme ich ein OutOfMemoryError.

Ich bin, sorry für diese newbie-Frage, aber ich Frage mich, wie kann ich den Speicher freizugeben, wenn eine Activity ist destroyed?

@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: FATAL EXCEPTION: main
Prozess-id:.testingapp.android.TestingApp, PID: 30885
java.lang.OutOfMemoryError: Fehler beim zuordnen einer 26211852 byte-Zuordnung mit 14018312 freien bytes und 13MB bis OOM
bei dalvik.system.VMRuntime.newNonMovableArray(Native-Methode)
an android.Grafik.Bitmap.nativeCreate(Native-Methode)
an android.Grafik.Bitmap.createBitmap(Bitmap.java:939)
an android.Grafik.Bitmap.createBitmap(Bitmap.java:912)
an android.Grafik.Bitmap.createBitmap(Bitmap.java:843)
an android.Grafik.Bitmap.createScaledBitmap(Bitmap.java:719)
bei id.testingapp.android.TestingApp.WelcomeActivity.prepareBackgroundAnimation(WelcomeActivity.java:140)
bei id.TestingApp.android.TestingApp.WelcomeActivity.onCreate(WelcomeActivity.java:72)
an android.app.Aktivität.performCreate(Aktivität.java:6283)
an android.app.Instrumentierung.callActivityOnCreate(Instrumentation.java:1119)
an android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
an android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
an android.app.ActivityThread.Zugriff auf$900(ActivityThread.java:177)
an android.app.ActivityThread$H. handleMessage(ActivityThread.java:1448)
an android.os.Handler.dispatchMessage(Handler.java:102)
an android.os.Looper.Loops(Looper.java:145)
an android.app.ActivityThread.main(ActivityThread.java:5942)
bei java.lang.reflektieren.Methode.invoke(Native-Methode)
bei java.lang.reflektieren.Methode.invoke(Method.java:372)
bei com.android.intern.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
bei com.android.intern.os.ZygoteInit.main(ZygoteInit.java:1195)

EDIT:

Ich habe versucht, alle diese in onDestroyed() aber das problem besteht weiterhin

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

InformationsquelleAutor der Frage JayVDiyk | 2015-12-22

Schreibe einen Kommentar