HTML5技术

Unity3D手游开发实践 - 吴秦(7)

字号+ 作者:H5之家 来源:H5之家 2016-04-21 13:00 我要评论( )

特别注意:多次调用setDefaultUncaughtExceptionHandler设置handler,后面注册的会覆盖前面注册的,以最后一次为准。 实现自定义的handler,只需要继承UncaughtExceptionHandler该接口,并实现uncaughtException方

特别注意:多次调用setDefaultUncaughtExceptionHandler设置handler,后面注册的会覆盖前面注册的,以最后一次为准。实现自定义的handler,只需要继承UncaughtExceptionHandler该接口,并实现uncaughtException方法即可。

    @Override  

        // Deal this exception

    }

}

在任何线程中,都可以通过setDefaultUncaughtExceptionHandler来设置handler,但在Android应用程序中,全局的Application和Activity、Service都同属于UI主线程,线程名称默认为"main"。所以,在Application中应该为UI主线程添加UncaughtExceptionHandler,这样整个程序中的Activity、Service中出现的UncaughtException事件都可以被处理。

捕获Exception之后,我们还需要知道崩溃堆栈的信息,这样有助于我们分析崩溃的原因,查找代码的Bug。异常对象的printStackTrace方法用于打印异常的堆栈信息,根据printStackTrace方法的输出结果,我们可以找到异常的源头,并跟踪到异常一路触发的过程。

        throwable.printStackTrace(pw);

        trace = writer.toString();

        pw.close();

}

  • Android Native Crash:前面我们知道可以编写和使用C/C++原生插件,除非C++使用try...catch捕获异常,否则一般会直接crash,通过捕获信号进行处理。

  • iOS 异常捕获:
  • 跟Android、Unity类似,iOS也提供NSSetUncaughtExceptionHandler 来做异常处理。

    #import "CatchCrash.h"

       

    @implementation CatchCrash

       

    {

        // 异常的堆栈信息

        NSArray *stackArray = [exception callStackSymbols];

        // 出现异常的原因

        NSString *reason = [exception reason];

        // 异常名称

        NSString *name = [exception name];

        NSString *exceptionInfo = [NSString stringWithFormat:@"Exception reason:%@\nException name:%@\nException stack:%@",name, reason, stackArray];

        NSLog(@"%@", exceptionInfo);

           

        NSMutableArray *tmpArr = [NSMutableArray arrayWithArray:stackArray];

        [tmpArr insertObject:reason atIndex:0];

       

        [exceptionInfo writeToFile:[NSString stringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()]  atomically:YES encoding:NSUTF8StringEncoding error:nil];

    }

       

    @end

    但是内存访问错误、重复释放等错误引起崩溃就无能为力了,因为这种错误它抛出的是信号,所以还必须要专门做信号处理。

  • windows crash:同样windows提供SetUnhandledExceptionFilter函数,设置最高一级的异常处理函数,当程序出现任何未处理的异常,都会触发你设置的函数里,然后在异常处理函数中获取程序异常时的调用堆栈、内存信息、线程信息等。
  •  

     

    8.适配与兼容

     

    8.1UI适配

     

  • 锚点(UIAnchor、UIWidgetAnchor属性)
  • NGUI UIRoot统一设置缩放比例
  • UIStretch
  •  

    8.2兼容

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

      【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

      2017-04-30 16:00

    • 在Delphi下使用迅雷APlayer组件进行免注册开发 - Delphi力量

      在Delphi下使用迅雷APlayer组件进行免注册开发 - Delphi力量

      2017-04-28 15:00

    • 随应潮流-基于ABP+Angularjs现代化应用软件开发框架(1)-总体介绍 - 在路在的张

      随应潮流-基于ABP+Angularjs现代化应用软件开发框架(1)-总体介绍 -

      2017-04-22 08:04

    • vue2.0版cnode社区项目搭建及实战开发 - sandisen

      vue2.0版cnode社区项目搭建及实战开发 - sandisen

      2017-04-20 14:00

    网友点评