我在Galaxy Nexus等设备中遇到问题,如果您继续打开活动,则会导致内存不足错误。我认为我有一些内存泄漏妨碍了活动的收集,但我找不到它。所以我写了这个小活动(纯粹是出于测试的目的。)系统在Galaxy Nexus内存不足之前未被系统损坏
public class Test extends Activity {
private byte[] imageData = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button iv = new Button(this);
imageData = new byte[1024 * 1024 * 2];
iv.setText("Open");
iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Test.this, Test.class));
}
});
setContentView(iv);
}
}
因此,基本上,它分配2MB内存,并且可以开同一活动的另一个实例。在Galaxy S和Kindle Fire上,如果不断开放,内存使用量会增加到某个特定点,然后开始销毁旧活动以开展新活动。
但是在Galaxy Nexus的,它只是直到64MB和崩溃与内存不足的错误。
那么,有什么我不知道Android的内存管理,或者这是在某些设备上的错误吗?如果这是一个错误,我该如何解决它?
谢谢。
“根据整个系统的活动总数,销毁旧活动的点数是一个任意数字” - 我觉得好奇的是,这与另一个SO答案相反,哈克博恩女士表示活动是从未销毁以释放内存,只有进程是:http://stackoverflow.com/a/7576275/115145任何机会,我可以让Googleland的任何人在那里写一篇Android开发人员博客帖子,并在这里发表权威声明?:-) – CommonsWare 2012-02-09 00:42:35
(并且请注意,我并不赞同您的建议,这是AFAIK的专利,只是为了深入了解活动是否纯粹出于内存原因而被销毁) – CommonsWare 2012-02-09 00:46:11
@CommonsWare(1/2 )我同意这个答案似乎与哈博恩女士的其他答案矛盾。然而,我只是好奇,如果所有关于这个问题的困惑都不能通过查看AOSP源代码来彻底放弃。与其他与android行为相关的其他事项(通常人们会引用源代码)中,与活动/流程生命周期有关的事项中,我主要看到理论上的答案(我并不争论;显然谷歌工程师知道的更好)。 – bitbybit 2016-09-12 19:15:34