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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie folgenden code für die
InformationsquelleAutor der Antwort Ravindra Kushwaha
In Tätigkeit, wenn Sie den Aufruf der
finish()
Methode ist zerstört und alle seine Ressourcen sind in der Warteschlange für die garbage collection.So, alle Speicher, die verwendet wurde, von dieser Tätigkeit befreit wird, während der nächste GC-Zyklus.
ODER
können Sie versuchen, diese zu reinigen, Speicher,
überprüfen diese details. hoffe, das hilft.
InformationsquelleAutor der Antwort Amit Vaghela
Versuchen, die bitmap auf null while-Aktivität, wird zerstört, und wenn der Wunsch ausführen der garbage collector.
InformationsquelleAutor der Antwort ajantha
fügen Sie diese zu Ihrem code
InformationsquelleAutor der Antwort Jatin Khattar
selbst nach der Zerstörung der activity durch den Aufruf finish(), die it-Ressourcen werden in der Warteschlange für die garbage collection. Tätigkeit befreit wird, während der nächste GC-Zyklus.
Können Sie auch
android:largeHeap="true"
auf Anfrage eine größere heap-Größe, die in Ihrer Anwendung-Tags in der manifest.InformationsquelleAutor der Antwort Androider
versuchen, beenden Sie die Aktivität beim drücken der zurück-Taste
InformationsquelleAutor der Antwort Anbarasu Chinna
Beendigung einer Aktivität nicht klar, die Erinnerung an Sie. Es entfernt nur die Aktivität von seinem stack, Android löscht seinen Speicher, wenn er es benötigt Speicher (garbage collection),wenn Sie Gesichts-Speicher-Problem aus drawable,
InformationsquelleAutor der Antwort Anbarasu Chinna