Xamarin Forms Android应用程序在90秒后抛出ANR弹出窗口

问题描述 投票:1回答:1

我们已经开发了Xamarin Forms的应用程序。在Android应用程序中,当用户在低网络中使用该应用程序约90秒钟时,我们将收到应用程序无响应(ANR)弹出窗口。我的问题是,有什么办法可以避免我的应用程序中出现此ANR弹出窗口?换句话说,有什么办法可以迫使android系统等待更长的时间吗?

在我们的应用程序中,当用户启动应用程序时,我们正在主要在辅助线程上运行的线程上执行多个任务,例如:

  • 初始化Google地图并创建图钉和折线图

  • Firebase侦听器寄存器

  • REST API调用

  • 正在加载列表项

因此,在设备完成上述任务列表之前,如果用户继续触摸屏幕,则这将导致多个事件在主线程中排队,因此我们将获得ANR(应用程序无响应弹出窗口)。

在这里,我们打算禁用触摸事件,直到完成现有任务中的主线程为止。

xamarin xamarin.forms xamarin.android android-anr-dialog
1个回答
0
投票

您可以使用以下逻辑将触摸限制在活动指示器下方的页面内容上,以解决您的问题。

但是,Android系统仍会听取下面网格的触摸,并将对其进行处理。在这里,您只能将交互限制为您的应用程序视图。但是,决不能忽略以下代码中Android系统为Grid,ContentView或ActivityIndi​​cator监听的触摸。

理想情况下,当加载程序正在加载时,没有用户会交互,因此,没有用户会尝试触摸更多次。因此,考虑到一般的用户思考过程,我想您可以放心地忽略这种情况。

<Grid Grid.RowSpan="2" 
        InputTransparent="{Binding IsPageInteractable}" 
        IsVisible="{Binding IsPageBusy}">
    <ContentView Opacity="0.2" 
                    BackgroundColor="#4B4B4B" 
                    VerticalOptions="FillAndExpand" 
                    HorizontalOptions="FillAndExpand" />
    <ActivityIndicator IsRunning="{Binding IsPageBusy}" 
                        HorizontalOptions="CenterAndExpand" 
                        VerticalOptions="CenterAndExpand" />
</Grid>
public bool IsPageInteractable
{
    get { return _isPageInteractable; }
    set { _isPageInteractable = value; }
}

public bool IsPageBusy
{
    get { return _isPageBusy; }
    set
    {
        _isPageBusy = value;
        this.IsPageInteractable = !value;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.