美文网首页
一个意想不到的crash

一个意想不到的crash

作者: ztzt123 | 来源:发表于2018-02-26 16:26 被阅读0次

先给大家上一段代码:

    ConnectivityManager conmgr = (ConnectivityManager) MovieProApplication.getContext()
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (conmgr.getActiveNetworkInfo() == null) {
        return NETWORK_UNKOWN;
    }
    switch (conmgr.getActiveNetworkInfo().getType())      {
        case ConnectivityManager.TYPE_WIFI:
            netWorkType = NETWORK_WIFI;
            break;
   }
   return netWorkType;

这段代码是读取网络状态。但能看出来这里隐藏着一个空指针异常吗(虽然出现的几率很低),这个crash的日志如下

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.net.NetworkInfo.getType()' on a null object reference
    at com.sankuai.moviepro.utils.bk.c(MovieUtils.java:783)
    at com.sankuai.moviepro.utils.c.b.d(ImageQualityUtil.java:265)
    at com.sankuai.moviepro.utils.c.b.c(ImageQualityUtil.java:221)
    at com.sankuai.moviepro.utils.c.b.d(ImageQualityUtil.java:294)
    at com.sankuai.moviepro.utils.c.b.b(ImageQualityUtil.java:83)
    at com.sankuai.moviepro.utils.c.b.a(ImageQualityUtil.java:120)
    at com.sankuai.moviepro.views.custom_views.by.onPreDraw(RemoteImageView.java:104)

报异常的位置是switch (conmgr.getActiveNetworkInfo().getType()),按照正常的思维,会想,我们在上面不是已经判断,为空的时候不是return了么,但事实就是这么巧两次执行conmgr.getActiveNetworkInfo()的结果如果不同呢,你会发现在上面判断不为空,在下面使用的时候就空指针了。有人会说这个几率很低,但如果这个方法比较耗时呢,读取的状态不同也就很正常了,分析完我们也可以复现这个crash了,在switch前打一个断点,然后切断网络,然后继续debug,然后就崩溃了。

解决的方法很简单,我们预先把这个读取出来,我们判断和使用的都是这个预先读取出来的networkInfo,这样就不会出现前后读取不一致的结果了。

NetworkInfo networkInfo = conmgr.getActiveNetworkInfo();

相关文章

  • 一个意想不到的crash

    先给大家上一段代码: 这段代码是读取网络状态。但能看出来这里隐藏着一个空指针异常吗(虽然出现的几率很低),这个cr...

  • Android Animation总结

    Android的动画用得好的话可以产生意想不到的效果,用得不好的话就会使程序产生Crash或者视图加载缓慢 And...

  • Android Crash收集

    这个崩溃日志的收集个人感觉还是很不错的,因为你可以通过这里面发现一些意想不到的Crash。 基本没什么步骤: 创建...

  • Crash Course Catalogue

    Crash Course Series: Crash Course: Physics Crash Course: ...

  • 为 NSThread.isMainThread 正言

    缘起 一个线上 crash crash 最终定位到 MBWebManager 一个方法中: 其中 MBWebVie...

  • Crash Log 符号化

    当我们导出一个 crash 日志的时候,我们打开crash文件,是否发现并不能定位到底crash在哪里?只能从中取...

  • iOS Crash三部曲~之三Crash分析

    1 iOS Crash Report app发生crash时会产生crash report,这对我们定位crash...

  • Crash 日志 简单分析 缩小查找范围

    看懂 Crash 日志 Crash 头部信息 Incident Identifier:每个 Crash 生成的唯一...

  • crash 收集分析

    crash 收集分析 当app发生crash时会产生crash report,查看crash记录对我们定位cras...

  • iOS-自定义字体库

    今天,经过多次测试的项目,交付客户测试,却遭到当头一棒。crash!crash!crash!不断的crash。原来...

网友评论

      本文标题:一个意想不到的crash

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