垃圾收集活动

时间:2015-10-12 18:28:03

标签: android android-activity garbage-collection

如果我没有弄错的话,Activity对象永远不会从内存中被销毁,它们总是存在,直到进程被终止。所以调用finish()或Android操作系统来破坏你的Activity并不意味着它在内存中被破坏,而只意味着它现在处于'被破坏状态'(非官方名称)。

为了演示,我确实覆盖了我的活动的finalize方法,然后从另一个活动的按钮点击事件中使用了System.gc()。我看到正在调用我的活动的finalize方法。如果在进程运行时无法销毁活动对象,那么如何对活动进行垃圾回收?

2 个答案:

答案 0 :(得分:6)

如果没有对活动的更多引用,那么它将获得垃圾收集 - 但泄漏活动非常容易 - 说现在有一个非常好的工具来查找活动泄漏:https://github.com/square/leakcanary 调用onDestroy()之后只调用一个Activity - 而不是在finish()之后直接调用 - 因此你的测量不起作用

答案 1 :(得分:1)

每个Activity进程都会保留在内存中,直到需要空间或用户强行将其从进程管理器中删除,如最近列表(按住主页/中间按钮)

这是MRU缓存模式。 Activityfinish()和/或onDestroy一起退出后,func startScanning() { print("Started scanning.") visiblePeripheralUUIDs.removeAllObjects() visiblePeripherals.removeAll(keepCapacity: true) tableView.reloadData() manager.scanForPeripheralsWithServices(nil, options: nil) scanTimer = NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: Selector("stopScanning"), userInfo: nil, repeats: false) } 将不会有太多余地,但JVM需要相当多的设置,因此仅保留在{I}的前提下在将来需要之前使用。除非你需要其他东西的记忆。

相关问题