Android 当活动被终止时,堆大小是如何增加的

Android 当活动被终止时,堆大小是如何增加的,android,android-intent,heap-memory,Android,Android Intent,Heap Memory,我不知道以前是否有人问过这个问题,但我想知道事情进展如何 我有两个活动*测试活动*和*第二个活动*。Test_活动有一个按钮可以调用第二个_活动(通过使用和意图调用),在我的第二个_活动中,我有一个按钮可以返回到第一个(使用意图)。我试着从测试第二次呼叫,然后从测试第二次返回测试。当我更新时,我尝试了大约10次(在这段时间内活动没有被杀死),我发现我的堆大小从3.027Mb-4.002Mb增加 之后,我在调用另一个活动时向编码中添加了*finish()*,并将相同的过程重复了10次。我发现堆的大

我不知道以前是否有人问过这个问题,但我想知道事情进展如何

我有两个活动*测试活动*和*第二个活动*。Test_活动有一个按钮可以调用第二个_活动(通过使用和意图调用),在我的第二个_活动中,我有一个按钮可以返回到第一个(使用意图)。我试着从测试第二次呼叫,然后从测试第二次返回测试。当我更新时,我尝试了大约10次(在这段时间内活动没有被杀死),我发现我的堆大小从
3.027Mb-4.002Mb
增加

之后,我在调用另一个活动时向编码中添加了
*finish()*
,并将相同的过程重复了10次。我发现堆的大小仍然在增加。这是怎么回事。。??当活动被终止时,它不是从内存中删除吗。。。??如果堆大小继续这样下去,当我的应用程序达到最大限制时,它不会被杀死吗。。。。??android应用程序堆大小的最大限制是什么

我想澄清的另一件事是,为什么只有2个活动(如上所述)而没有太多资源的应用程序会消耗3.027Mb的堆大小?我没有添加任何可提取的内容或任何内容。

这一增长(3到4MB)是完全不相关的。如果需要,Android可能会实例化并保留一些资源。如果你真的关心内存消耗,你应该做一个测试。这里有一个关于内存管理的非常好的例子。如果您觉得程序中有一些内存泄漏(活动挂在某处,您不知道在哪里以及如何进行),这里有一个可以帮助您跟踪它的方法

之后,我在编码中添加了*onFinish()*
没有Android调用的
onFinish
回调方法


应用程序使用的总堆未标准化。我在索尼电脑上看到过同样的应用程序,使用4到6MB,在三星电脑上看到同样的应用程序,使用15MB到20MB。这是一个非常简单的应用程序。。。这完全取决于制造商。只要您没有泄漏大量内存块,或者使用的资源没有超出实际需要,您就不必担心这些不同的内存使用。

是您的
测试活动
?@Apoorv不,不是,但我会尝试一下that@Apoorv当android:launchMode=“singleTop”时,它真的会增加/减少堆大小吗?我在评论finish()后尝试了launchMode=“singleTop”,最初堆的大小大约是3.008,经过了10倍于5.00+1的尝试,但为什么会根据供应商的不同而有所不同?为什么开发人员不担心这个呢?。如果它仍然增加很长一段时间,那么应用程序将崩溃,内存不足。我不知道为什么会出现这些不同的内存大小。OutOfMemory只有在您使用的资源比您应该使用的资源更大或泄漏了一些大数据时才会出现。只要你做得对,你就不必担心这些增长,因为设备知道如何回收所需的内存。是的,我同意,但正如OP所说,即使是OP也没有使用更大的资源,而且内存仍在快速增长。@gunar not onFinish()我的意思是finish()很抱歉,我已经在帖子中更正了。@suja:正如回答中所说的,这是无关紧要的。您可能会发现,在其他类型的设备上,这一增长并未出现,而在其他类型的设备上,这一增长甚至更快。