我应该在每次使用FindViewById后调用Dispose()吗?
本文关键字:Dispose 调用 FindViewById 我应该 | 更新日期: 2023-09-27 18:08:09
为了防止Android Xamarin中的任何内存泄漏,我应该在使用FindViewById后调用Dispose()吗?
一个例子:
void SetTextSomewhereInMyView()
{
var myTextView = FindViewById<TextView>(Resouce.Id.myTextView);
myTextView.Text = "This is my Text View";
// Should I be calling dispose now? or is it OK not to call dispose?
myTextView.Dispose(); // ?
}
我没有看到在Xamarin示例中调用那么多Dispose,但后来我在一些地方读到这将是一个很好的实践。这件事的最终结论是什么?
FindViewById是一个昂贵的调用,您不应该经常这样做。相反,将引用保存在一个字段中,并在OnDestroy或OnTrimMemory中处理该实例。
如果您只需要此视图一次,那么在使用后立即处理它。
我认为每次需要时调用FindViewById
比不调用Dispose
的开销更昂贵。我的方法是像这样延迟加载我的视图:
private TextView _myTextView;
public TextView MyTextView
{
get
{
return _myTextView?? (_myTextView= FindViewById<TextView>(Resouce.Id.myTextView));
}
}
void SetTextSomewhereInMyView()
{
MyTextView.Text = "This is my Text View";
}
因此,FindViewById
只在需要时调用,然后缓存对视图的引用。
如果你想再次使用TextView
,你有Disposed
,它将不得不调用FindViewById
,这是一个昂贵的操作。但是,如果您正在设置TextView's Text
值,不打算再次引用该TextView,那么调用Dispose