【发布时间】:2018-01-04 07:44:57
【问题描述】:
我发现虽然有很多关于 Xamarin Android 的教程,但似乎没有太多关于如何处理资源的内容。更具体地说,当它们被丢弃时。
例如,在一个活动的 OnCreate 处理程序中,我进行了多个 Rx 订阅,每个订阅都返回一个 IDisposable。我试图在各种其他处理程序(例如 OnDestroy)中处理这些处理程序,但这些处理程序从未被调用。但订阅似乎堆积如山,因为每次导航到活动时都会运行 OnCreate。
除了那些订阅之外,还有我分配给类级变量(字段)的所有 UI 控件(TextViews、Buttons 等)。而那些也实现了IDisposable。
据我所知,我到处都是内存泄漏。
在任何地方都有这方面的指导吗?
【问题讨论】:
-
我建议您查看 Activity 生命周期流程图:developer.android.com/guide/components/activities/…
OnResume和OnPause覆盖是您的朋友 ;-) -
@SushiHangover 我来看看。我想知道如果 OnPause 被调用,为什么 OnCreate 会被调用。我原以为 OnResume 意味着 OnCreate 不需要再次运行。但我会看看那些处理程序。
-
OnCreate将被称为 if Activity 需要创建,如果它而不是仅在当前 Activity 上调用Finish来创建一个新实例返回导航堆栈中的最后一个? -
@SushiHangover 我没有打电话给 Finish。当我再次回家时,我将不得不检查我的代码,但我想我正在调用 StartActivity 以导航回原始 Activity。我可以从您的评论中看出我应该将其从堆栈中弹出以返回。
-
是的,通过
StartActivity创建一个新实例并不是通常您想要做的。在某些情况下,这是您想要的,但它已添加到堆栈中。或者添加活动是singleTop,以便向现有实例发送一个新的Intent(在OnNewIntent覆盖中读取该意图)等等......但通常你只会Finish你的活动打开并返回到最后一个..