我正在尝试处理Android内存。问题是我想完全释放所有内存并开始一项新活动。我找到了一些有用的答案:
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之间切换。这是内存消耗的图片:
第二个例子:
在MainActivity中:
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
在Main2Activity中:
onBackPressed();
看起来像是Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK不是完全释放内存的完美方式。
我真的需要知道,无论如何都要释放所有内存,就像第二个例子一样?
提前谢谢!
答案 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上测试 - 效果很好。