From 9e6d3cf4acf228cf652d25c7d2de7fadbbcde28a Mon Sep 17 00:00:00 2001 From: zabolotnev Date: Sat, 25 May 2024 13:24:04 +0500 Subject: [PATCH] Fix Android app randomly hangs (15807) (#15810) --- src/Android/Avalonia.Android/AvaloniaActivity.cs | 3 +++ src/Android/Avalonia.Android/AvaloniaView.cs | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Android/Avalonia.Android/AvaloniaActivity.cs b/src/Android/Avalonia.Android/AvaloniaActivity.cs index d0538b6304..4e7917494b 100644 --- a/src/Android/Avalonia.Android/AvaloniaActivity.cs +++ b/src/Android/Avalonia.Android/AvaloniaActivity.cs @@ -122,6 +122,9 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity { attributes.LayoutInDisplayCutoutMode = LayoutInDisplayCutoutMode.ShortEdges; } + + // We inform the ContentView that it has become visible. OnVisibleChanged() sometimes doesn't get called. Issue #15807. + _view?.OnVisibilityChanged(true); } protected override void OnDestroy() diff --git a/src/Android/Avalonia.Android/AvaloniaView.cs b/src/Android/Avalonia.Android/AvaloniaView.cs index f72da82010..aa5124dcea 100644 --- a/src/Android/Avalonia.Android/AvaloniaView.cs +++ b/src/Android/Avalonia.Android/AvaloniaView.cs @@ -68,9 +68,9 @@ namespace Avalonia.Android OnVisibilityChanged(visibility == ViewStates.Visible); } - private void OnVisibilityChanged(bool isVisible) + internal void OnVisibilityChanged(bool isVisible) { - if (isVisible) + if (isVisible && _timerSubscription == null) { if (AvaloniaLocator.Current.GetService() is ChoreographerTimer timer) { @@ -84,10 +84,11 @@ namespace Avalonia.Android (insetsManager as AndroidInsetsManager)?.ApplyStatusBarState(); } } - else + else if (!isVisible && _timerSubscription != null) { _root.StopRendering(); _timerSubscription?.Dispose(); + _timerSubscription = null; } }