Skip to content

Right way to dispose page with WebView #18021

Description

@ac-lap

Description

Android app has 2 pages, 1 home page and 1 page containing WebView. From home page user can go to the WebView page and open a site, come back to the home page and again go to WebView page to open other site, user can do this multiple times.

After few such cycles, in edge://inspect/#devices you see multiple instances of the WebView and with page navigating away the WebView is not going away, I am concerned that this is causing memory leak.

image

I see the WebView class does not has any close/dispose/destroy kind of methods. What is the proper way to close the page containing WebView so that all resources are properly released?

I have attached the sample app which reproduces the issue. Pasting some code snippets for quick reference -

        private async void OnCounterClicked(object sender, EventArgs e)
        {
            List<string> siteList = new List<string>() { "https://www.google.com", "https://www.bing.com", "https://www.youtube.com", "https://www.microsoft.com" };
            Random rnd = new Random();
            await Navigation.PushAsync(new NewPage1(siteList[rnd.Next(0, siteList.Count)]));
        }
    public NewPage1(string site)
    {
        InitializeComponent();
        webview.Source = site;
    }
    private void GoBack(object sender, EventArgs e)
    {
        Navigation.PopAsync();
    }

Steps to Reproduce

  1. Build and start the app attached in the zip on Android device.
  2. Click on 'Click me'
  3. New page with site loads, click 'Go Back'
  4. Repeat step 2 and 3 few times.
  5. Open edge://inspect/#devices
  6. Look for the device, you'll see all instances of WebView

MauiAppWebView.zip

Link to public reproduction project repository

No response

Version with bug

7.0.96

Is this a regression from previous behavior?

Not sure, did not test other versions

Last version that worked well

Unknown/Other

Affected platforms

Android

Affected platform versions

No response

Did you find any workaround?

No response

Relevant log output

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions