首页 > 解决方案 > Android,Xamarin:捕获随机异常:

问题描述

我有一点问题 - 有时我的应用程序在这里崩溃:

    public override void OnWindowFocusChanged(Boolean hasFocus)
    {
        base.OnWindowFocusChanged(hasFocus);

        if(intInstanz == 1 && boolTutorialWasAlreadyVisible == false)
        { 
            new FancyShowCaseView.Builder(this) // if this crashes, we need clean rebuild
                .Title(Resources.GetString(Resource.String.Tutorial1))
                .TitleStyle(0, (int)GravityFlags.Bottom | (int)GravityFlags.Center)
                .FocusOn(btnBackground)
                .Build()
                .Show();

            boolTutorialWasAlreadyVisible = true;
        }
    }

它工作,工作,工作,然后突然。这可以通过清理项目来解决。但是,这甚至有时会在发布的版本上发生。这是一个大问题。FancyShowCaseView 是一个额外的组件——我无法控制它的作用。那么有没有办法在这里捕捉崩溃,如果它发生只是“跳过” .Show(); 也许?

那非常重要。谢谢!

标签: c#android

解决方案


关于try catch语句的长话短说是,如果try部分中的语句无法执行,代码会跳转到该catch部分并执行那里的内容,可能会显示一个带有错误的对话框或记录异常。控件的特定例外情况FancyShowCaseView可能在组件的文档中进行了描述,但对于初学者,您可以将Exception类用作:

try 
{
    new FancyShowCaseView.Builder(this) // if this crashes, we need clean rebuild
            .Title(Resources.GetString(Resource.String.Tutorial1))
            .TitleStyle(0, (int)GravityFlags.Bottom | (int)GravityFlags.Center)
            .FocusOn(btnBackground)
            .Build()
            .Show();
}
catch (Exception ex)
{
     //log or show message
}    

最后,您可能希望对组件失败而无法恢复的原因进行一个小研究。exobject 应该为您提供有关问题所在的信息。


推荐阅读