Java 安卓:绝对清除活动
我正在尝试处理Android内存。问题是我想完全释放所有内存并开始新的活动。我找到了一些有用的答案: 在此之后,我尝试举两个例子: 第一个例子: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
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();