我应该在每次使用FindViewById后调用Dispose()

时间:2015-08-17 07:47:28

标签: c# android xamarin

为防止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(); // ?
}

我还没有看到Dispose在Xamarin示例中被称为那么多,但后来我在一些地方读到这将是一个很好的做法。最后一句话是什么?

2 个答案:

答案 0 :(得分:4)

FindViewById是一个昂贵的电话,你不应该经常这样做。而是将引用保存在字段中,并将该实例置于OnDestroy或OnTrimMemory。

如果您只需要此视图一次,请在使用后立即处理。

答案 1 :(得分:2)

我认为每次需要时调用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