Android:绝对清除活动

时间:2016-01-11 02:52:25

标签: java android memory-leaks

我正在尝试处理Android内存。问题是我想完全释放所有内存并开始一项新活动。我找到了一些有用的答案:

Android: Clear the back stack

Android: Clear Activity Stack

Clear the entire history stack and start a new activity on Android

之后,我尝试举两个例子:

第一个例子:

    Intent intent = new Intent(MainActivity.this, Main2Activity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);

我使用上面的代码在两个活动A和B之间切换。这是内存消耗的图片: enter image description here

第二个例子:

在MainActivity中:

    Intent intent = new Intent(MainActivity.this, Main2Activity.class);
    startActivity(intent);

在Main2Activity中:

    onBackPressed();

我也在两个活动之间切换。这个例子的内存消耗: enter image description here

看起来像是Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK不是完全释放内存的完美方式。

我真的需要知道,无论如何都要释放所有内存,就像第二个例子一样?

提前谢谢!

3 个答案:

答案 0 :(得分:1)

添加android:noHistory =&#34; true&#34;属于AndroidManifest.xml中的<activity>,如下所示:

<activity android:name=".MyActivity"
    android:noHistory="true">
</activity>

设置标志

Intent i = new Intent(this, Splash.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(i);
    finish();

并查看此链接Changing activity in android clears the memory needed for the previous activities?
以及此链接https://commonsware.com/blog/2011/10/03/activities-not-destroyed-to-free-heap-space.html

答案 1 :(得分:0)

如果你遇到这个问题,你可能会遇到一个可以更优雅地解决的内存问题,例如修复内存泄漏并减少位图的大小。如果没有任何内存泄漏,如果程序接近堆中的空间不足,则应从内存中清除第一个Activity。

但如果你真的需要这样做,你可以这样做:

Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
System.exit(0);

这会在更改活动时产生不良延迟,打破Android“后退”按钮的“标准”使用,并可能产生其他负面影响(例如,如果您正在播放背景音乐),但它会确保内存使用率从0开始重新启动。

答案 2 :(得分:0)

在我完成活动后,以下是为我释放内存的方法:

在您的活动的 onDestroy()方法中添加

Runtime.getRuntime().gc();

在Android 5.1.1,4.4上测试 - 效果很好。