如果我没有弄错的话,Activity对象永远不会从内存中被销毁,它们总是存在,直到进程被终止。所以调用finish()或Android操作系统来破坏你的Activity并不意味着它在内存中被破坏,而只意味着它现在处于'被破坏状态'(非官方名称)。
为了演示,我确实覆盖了我的活动的finalize方法,然后从另一个活动的按钮点击事件中使用了System.gc()。我看到正在调用我的活动的finalize方法。如果在进程运行时无法销毁活动对象,那么如何对活动进行垃圾回收?
答案 0 :(得分:6)
如果没有对活动的更多引用,那么它将获得垃圾收集 - 但泄漏活动非常容易 - 说现在有一个非常好的工具来查找活动泄漏:https://github.com/square/leakcanary 调用onDestroy()之后只调用一个Activity - 而不是在finish()之后直接调用 - 因此你的测量不起作用
答案 1 :(得分:1)
每个Activity
的进程都会保留在内存中,直到需要空间或用户强行将其从进程管理器中删除,如最近列表(按住主页/中间按钮)
这是MRU缓存模式。 Activity
与finish()
和/或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}的前提下在将来需要之前使用。除非你需要其他东西的记忆。