我们已经开发了Xamarin Forms的应用程序。在Android应用程序中,当用户在低网络中使用该应用程序约90秒钟时,我们将收到应用程序无响应(ANR)弹出窗口。我的问题是,有什么办法可以避免我的应用程序中出现此ANR弹出窗口?换句话说,有什么办法可以迫使android系统等待更长的时间吗?
在我们的应用程序中,当用户启动应用程序时,我们正在主要在辅助线程上运行的线程上执行多个任务,例如:
初始化Google地图并创建图钉和折线图
Firebase侦听器寄存器
REST API调用
正在加载列表项
因此,在设备完成上述任务列表之前,如果用户继续触摸屏幕,则这将导致多个事件在主线程中排队,因此我们将获得ANR(应用程序无响应弹出窗口)。
在这里,我们打算禁用触摸事件,直到完成现有任务中的主线程为止。
您可以使用以下逻辑将触摸限制在活动指示器下方的页面内容上,以解决您的问题。
但是,Android系统仍会听取下面网格的触摸,并将对其进行处理。在这里,您只能将交互限制为您的应用程序视图。但是,决不能忽略以下代码中Android系统为Grid,ContentView或ActivityIndicator监听的触摸。
理想情况下,当加载程序正在加载时,没有用户会交互,因此,没有用户会尝试触摸更多次。因此,考虑到一般的用户思考过程,我想您可以放心地忽略这种情况。
<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;
}
}