Xamarin形成Android应用程序,90秒后弹出ANR
我们开发了一个Xamarin形式的应用程序。在Android应用程序中,当用户在低网络中使用应用程序约90秒时,我们会看到应用程序无响应(ANR)弹出窗口。我的问题是,有没有办法避免在我的应用程序中出现这个ANR弹出窗口?换句话说,有没有办法强迫android系统等待更长的时间 在我们的应用程序中,当用户启动应用程序时,我们在主要在辅助线程上运行的线程上执行多个任务,如:Xamarin形成Android应用程序,90秒后弹出ANR,xamarin,xamarin.forms,xamarin.android,android-anr-dialog,Xamarin,Xamarin.forms,Xamarin.android,Android Anr Dialog,我们开发了一个Xamarin形式的应用程序。在Android应用程序中,当用户在低网络中使用应用程序约90秒时,我们会看到应用程序无响应(ANR)弹出窗口。我的问题是,有没有办法避免在我的应用程序中出现这个ANR弹出窗口?换句话说,有没有办法强迫android系统等待更长的时间 在我们的应用程序中,当用户启动应用程序时,我们在主要在辅助线程上运行的线程上执行多个任务,如: 初始化Google地图并创建接点和多段线图形 Firebase侦听器寄存器 RESTAPI调用 正在加载列表项 因此,在
- 初始化Google地图并创建接点和多段线图形
- Firebase侦听器寄存器
- RESTAPI调用
- 正在加载列表项
在这里,我们打算禁用触摸事件,直到完成现有任务中的主线程。您可以使用以下逻辑将触摸限制在活动指示器下方的页面内容,以解决问题 不过,Android系统仍将收听下面网格的触摸,并对其进行处理。在这里,您只能将交互限制到应用程序视图。但是,在下面的代码中,Android系统对Grid、ContentView或ActivityIndicator的触摸是绝对不能忽略的 理想情况下,当加载程序加载时,用户意识到没有交互后,不会尝试触摸更多次。因此,考虑到用户的一般思维过程,我想您可以放心地忽略这个案例
您不能更改导致ANR出现的操作系统级触发器,但在开发周期中启用
StrictMode
(以及拉动ANR跟踪)等操作会将您的意图集中在编码错误的区域。我建议阅读谷歌的ANR文档:
<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;
}
}