maui icon indicating copy to clipboard operation
maui copied to clipboard

Right way to dispose page with WebView

Open ac-lap opened this issue 2 years ago • 4 comments

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

ac-lap avatar Oct 14 '23 03:10 ac-lap

Folks, any guidance around this? It's kind of a fundamental issue.

@jsuarezruiz @jfversluis

ac-lap avatar Oct 22 '23 14:10 ac-lap

Bump

Denny966 avatar Nov 21 '23 15:11 Denny966

Folks any help on this issue?

ac-lap avatar Jan 10 '24 17:01 ac-lap

In .NET 8, there is https://github.com/dotnet/maui/pull/18810. Maybe that would need to be backported?

MartyIX avatar Jan 25 '24 09:01 MartyIX

AutoDisconnectBehavior from my memory toolkit might help here: https://github.com/AdamEssenmacher/MemoryToolkit.Maui

I haven't tested it out on WebViews yet, but since you're not getting much help here it might be worth a try.

AdamEssenmacher avatar Feb 02 '24 10:02 AdamEssenmacher

Can't repro this issue on Android device on the latest 17.10.0 Preview 3(8.0.0-preview.1.7762).

RoiChen001 avatar Apr 17 '24 07:04 RoiChen001

Can't repro this issue on Android device on the latest 17.10.0 Preview 3(8.0.0-preview.1.7762).

As from what I can see 8.0.0-preview.1.7762 is from 2/21/2023. Is it the version you have in mind?

adamdzk avatar Apr 18 '24 09:04 adamdzk

The issue still reproduces for me on net 8 and physical android device.

image image

I have re-uploaded the repro project with net 8.

MauiAppWebView_net8.zip

This is quite serious issue, and would appreciate any assistance on this.

@RoiChen001 plz remove the try-latest-version label.

ac-lap avatar Apr 19 '24 07:04 ac-lap

Can repro this issue at Android platform on the latest 17.10 Preview 6(8.0.20&8.0.21). 18021

RoiChen001 avatar May 07 '24 05:05 RoiChen001