Xamarin Android - 我的AlertDialog扩展会泄漏内存吗?

时间:2016-06-03 21:01:09

标签: c# android memory-leaks xamarin.android

我在Activity上创建了一个简单的扩展来显示Alert Dialogs。我从其他来源了解到,在显示一个防止内存泄漏的对话框后需要调用Dispose()方法。由于我没有“alert”的引用,我无法调用Dispose()。但是,我将我的代码放在Using语句中,但我不确定这是否有效。作为旁注,我不确定“EventHandler”null是否也可能导致问题。

所以,问题是,这段代码会泄漏内存吗?如果是这样,你能告诉我一个写这个扩展的正确方法吗?

using DB = System.Diagnostics.Debug;

public static class AndroidExtensions
{
    public static void ShowAlert(this Activity activity, string title, string message, string cancelButtonTitle) {
        if (activity == null) {
            DB.WriteLine("ShowAlert() : Failure showing alert; activity is null");
            return;
        }

        try {
            using (var builder = new AlertDialog.Builder (activity)) {
                if (cancelButtonTitle != "") {
                    builder.SetNegativeButton (cancelButtonTitle, (EventHandler<DialogClickEventArgs>)null);
                }

                using (var alert = builder.Create ()) {
                    if (title != "") {
                        alert.SetTitle (title);
                    }

                    alert.SetMessage (message);
                    activity.RunOnUiThread(()=> {
                        alert.Show ();
                    });
                }
            }
        } catch(Exception ex) {
            DB.WriteLine ("ShowAlert() : Couldn't create alert : " + ex.Message);
        }
    }
}

0 个答案:

没有答案