Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓:绝对清除活动_Java_Android_Memory Leaks - Fatal编程技术网

Java 安卓:绝对清除活动

Java 安卓:绝对清除活动,java,android,memory-leaks,Java,Android,Memory Leaks,我正在尝试处理Android内存。问题是我想完全释放所有内存并开始新的活动。我找到了一些有用的答案: 在此之后,我尝试举两个例子: 第一个例子: Intent intent = new Intent(MainActivity.this, Main2Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivit

我正在尝试处理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之间切换。下面是内存消耗的图片:

第二个例子:

在主要活动中:

    Intent intent = new Intent(MainActivity.this, Main2Activity.class);
    startActivity(intent);
在Main2活动中:

    onBackPressed();
我也在两种活动之间切换。此示例的内存消耗:

看起来Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK不是完全释放内存的最佳方式

我真的需要知道,有没有像第二个例子那样释放所有内存


提前谢谢你

如果您有这个问题,您可能有一个内存问题,可以更优雅地解决,例如修复内存泄漏,或者减小位图的大小。如果没有任何内存泄漏,如果程序在堆中的空间即将耗尽,则应清除内存中的第一个活动

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

Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
System.exit(0);
这将在更改活动时造成不必要的延迟,打破安卓“后退”按钮的“标准”使用,并可能产生其他负面影响(例如,如果您正在播放背景音乐),但它将确保内存使用从0重新启动。

将安卓:noHistory=“true”属性添加到您的


还有这个链接,这里是我完成活动后释放内存的方法:

在活动的ondestory()方法中添加

Runtime.getRuntime().gc();

在Android 5.1.1和4.4上测试-工作完美。

为什么不调用finish();在您开始新活动之后?谢谢您的评论,我的目标是在开始许多活动之后释放内存,以便onBackPressed()或finish()函数不能满足我的需要。我之所以举这个例子,是因为我想确保Android能够以某种方式发布所有memeory,但Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK无法做到这一点谢谢,@kmell96!在我的第一个例子中,根本没有图像。我只有两个活动A和B。通过使用该函数,我从A开始活动B,然后再从B开始活动A。每当我开始一个新活动时,我都会设置flag Intent.flag_activity_new_TASK | Intent.flag_activity_CLEAR_TASK,但它无法释放所有内存,就像函数onBackPressed()或finish()@LuongTruong还有一个窍门——我缩小了用作背景的位图的大小。在退出时,我已经成功地清除了活动占用的大部分内存。使用gc()可以很好地指示根本上已损坏的代码。避免使用它。你不知道垃圾收集器会做什么
Intent i = new Intent(this, Splash.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(i);
    finish();
Runtime.getRuntime().gc();