美文网首页APP测试
Android常见异常

Android常见异常

作者: 张小Di | 来源:发表于2019-07-02 22:38 被阅读1次

    Android常见异常

    异常分为编译时异常和运行时异常,当前主要说一下运行时异常,常见的异常如下:
    NullPointerException空指针异常

    调用了未经初始化的对象或者是不存在的对象。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。
    经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)。目前,客户端页面显示很多需要依赖服务端返回数据,当网络异常时,没有获取到对象,此时为null,就很容易出现nullpointerException异常。有可能也是代码错误,没有new造成的。

    bugly解释如下:

    [原因]该异常表示尝试去调用接口方法时,使用了一个空对象引用,建议您检查引用的对象是否为空。
    [解决方案]:这种异常通常是调用一个对象的接口方法抛出的,在调用接口方法之前,要进行判空或者进行try-catch,这样基本可以规避大部分空指针异常。
    最常见是在 回调接口, 如 网络请求回调,第三方登录回调 返回的时候 调用 context.startActivity 时 context 为空导致。可以在 context 为空的时候使用 Application Context, 加上
    if (!(context instanceof Activity)) {
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    }

    ArrayindexOutOfBoundsExceptions数组越界异常

    [原因]:该异常表示数组越界。
    [解决方案]:这种情况一般要在数组循环前做好length判断,index超出length上限和下限时都会报错。举例如下:一个数组int test[N],一共有N个元素分别是test[0]~test[N-1],如果调用test[N],将会报错。建议读取时,不要超过数组的长度(array.length)。
    Android中一种常见情形就是上拉刷新中header也会作为listview的第0个位置,如果判断失误很容易造成越界。

    indexOutOfBoundsException越界异常

    [原因]:该异常表示不合法下标,通常是因为访问了list不合法的位置,建议检查数据是否越界。
    [解决方案]:
    1.遍历数组/字符串等集合前,要判断遍历对象的长度;
    2.操作数组/字符串等集合前,要检查角标是否在长度允许范围内;
    3.ListView操作不当也会引起该异常,这种情况下一般是由于List渲染的时候,外面的数据源发生变化导致的。举例如ListView滚动时点击刷新将会报错,解决方法是ListView滚动时将刷新置为不可点击。

    outOfMemory内存溢出
    内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。
    bugly解释如下:

    OOM是常见的java错误,OOM主要有:

    1. OOM fo heapjava.lang:OutOfMemoryError: Java heap space,此OOM是由于JVM中heap的最大值不满足需要,将设置heap的最大值调高即可。
    2. OOM for Perm:java.lang:OutOfMemoryError: Java perm space,此OOM是由于JVM中perm的最大值不满足需要,将设置perm的最大值调高即可,参数样例为:-XX:MaxPermSize=512M
    3. OOM for GC=>例如:java.lang:OutOfMemoryError: GC overhead limit exceeded,此OOM是由于JVM在GC时,对象过多,导致内存溢出,建议调整GC的策略
    4. OOM for native thread created:java.lang.OutOfMemoryError: unable to create new native thread,此OOM是由于进程剩余的空间不足,导致创建进程失败
    5. OOM for allocate huge array:Exception in thread "main": java.lang.OutOfMemoryError: Requested array size exceeds VM limit,此类信息表明应用程序(或者被应用程序调用的APIs)试图分配一个大于堆大小的数组
    6. OOM for small swap:Exception in thread "main": java.lang.OutOfMemoryError: request <size> bytes for <reason>. Out of swap space?,抛出这类错误,是由于从native堆中分配内存失败,并且堆内存可能接近耗尽
    7. OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack trace available,抛出这类错误,一般是由于方法重复调用、死循环引起,直至内存耗尽

    illegalStateException非法状态异常

    该异常表示,当前对客户端的响应已经结束,不能在响应已经结束(或说消亡)后再向客户端(实际上是缓冲区)输出任何内容。

    illegalArguementException非法参数异常

    参数不匹配异常,通常由于传递了不正确的参数导致。
    常见于:

    1. Activity、Service状态异常;
    2. 非法URL;
    3. UI线程操作
    4. Fragment中嵌套了子Fragment,Fragment被销毁,而内部Fragment未被销毁,所以导致再次加载时重复,在onDestroyView() 中将内部Fragment销毁即可
    5. 在请求网络的回调中使用了glide.into(view),view已经被销毁会导致该错误

    ClassCastException类型强制转换异常

    当试图将对某个对象强制执行向下转型,但该对象又不可转换为其子类的实例时将引发该异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。
    java.lang.ArithmeticException 算术条件异常
    如:整数除零等

    平时测试过程中如何发现异常
    1. 深入了解开发设计,了解前后端是如何配合的
    2. 弱网环境专项等健壮性测试在情况允许的情况下尽量执行
    3. 多总结,出现问题后多跟研发沟通

    java.lang.OutOfMemoryException

    相关文章

      网友评论

        本文标题:Android常见异常

        本文链接:https://www.haomeiwen.com/subject/tbdthctx.html