美文网首页
Android常见问题、定位、解决

Android常见问题、定位、解决

作者: 上山走18398 | 来源:发表于2019-10-27 23:38 被阅读0次

    简介

    安卓常见问题的功能表现
    问题定位
    解决优化方案
    监控治理
    5wy分析法
    RCA分析法 从分析方法开始回答
    ......

    1. Android app启动时黑屏或者白屏的原因及解决方案

    1. 产生原因:
      因为还没加载到布局文件,就已经显示了window窗口背景_预览窗口,黑白屏就是window的窗口背景(为了告诉用户已经点开app了,只是还没有加载完,不用重复点app图标了)
    2. 解决办法:
      1)设置Style -设置背景图
      2)设置透明Theme
    2. 程序停止运行可能的原因

    内存不足、、、、

    3. App界面卡死

    原因:app一级页面,再返回是没有任何相关的页面,由于这个原因造成页面的卡死,造成了页面不响应
    解决:在一级页面分别添加禁用和开启右滑返回手势
    http://www.51testing.com/html/22/100922-3722271.html
    https://www.cnblogs.com/laly/p/5282796.html log分析

    安卓日志如crash收集实现

    https://blog.csdn.net/h1130189083/article/details/79137746
    收集,统计,分析
    UncaughtExceptionHandler 类
    uncaughtException()
    handleException()
    Crash数据表结构,包含哪些信息

    4. ANR

    https://blog.csdn.net/Mirage520/article/details/42919127
    iowait block memoryleak
    日志分析关键词: ANR Fatal(异常退出,强制关闭_FC) Thread =>回代码
    造成ANR的场景:5(KeyDispatchTimeout activity) 10 20
    造成ANR的原因:

    1. 当前的事件没有机会得到处理(UI主线程 其它线程占用高 主线程没有抢占到cpu Looper handler MessageQueue)
    2. 当前的事件正常处理,没有及时完成

    如何避免ANR:
    UI主线程避免耗时操作,只做UI问题
    耗时的工作放入子线程
    Activity生命周期尽量不要做耗时的操作,如onCreate onResume OnPause(保持状态数据之类)

    5. 弱网络下常见问题

    弱网络:带宽(上行 下行) 延时 丢包等情况

    用户登录应用时,下载初始化数据,过程太慢退出再重新登录,造成数据不一致

    用户数据上传过程中,弱网络不稳定,再次联网后导致重复写入,形成脏数据

    弱网络环境下,用户请求页面时间较长,等待的过程中,页面上的控件仍然可以操作,用户点击控件时,出现应用闪退现象
    产生原因: 没有对数据加载流程进行判断,直接暴露控件,当出现依赖数据的控件操作时,没有在数据返回之前做兼容处理
    解决: 当数据加载完全后,再把控件置为可操控
    同类型bug:缓存不足把activity kill掉,handler时间过长
    关注弱网络下的中间状态

    搜索情况下,第一次请求,第二次请求,由于弱网络原因导致第二条返回数据被第一条覆盖

    内存问题

    当系统因为内存紧张杀死非前台进程(并非真正杀死),然后用户将被系统杀死的非前台app带回前台,如果这个时候有UI是呈现在Fragment中,那么会因为restore造成Fragment需要通过反射实例对象,从而将之前save状态还原。。。。

    网络下载,开启多线程,下载大量图片(超过一百张),未有异常保护,导致OOM

    常见Crash问题总结

    Checked Exception 和 Uncheckd Exception
    RuntimeException及其子类为运行时异常
    没有try...catch的异常为Uncaught异常

    Crash捕获机制: UncaughtExceptionHandler => public abstract void uncaughtException(Thread thread, Throwable ex)
    通过实现自己的异常handler,为UI主线程添加handler,这样整个程序中Activity、Service中出现的UncaughtException事件都可以被处理
    以此来实现异常数据的上报云端

    public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler handler)
    捕获异常后上传,堆栈信息
    
    java预发相关异常
    1. NullPointerException: 空指针异常,调用了未存在的对象或者不存在已销毁的对象,这个错误经常出现在常见图片,调用数组这些操作中
      一些全局变量,一旦发生内存回收,这些全局变量就会被置空
    1. ClassNotFoundException: 指定的类不存在,如类名替换,类名冲突等
    1. IndexOutOfBoundsException: 索引越界
    1. IllegalArgumentException:非法参数
    1. NumberFormatException: 字符串转为数字类型时异常
    1. java.lang.OutOfMemoryError:
    1. java.lang.StackOverflowError:堆栈溢出,当一个应用递归调用层次太深而导致堆栈溢出
    1. ClassCastException:
      rom api
    1. 试图调用一个空对象:
      Attempt to invoke virtual method on a null object reference
    1. ClassNotFoundException:
      Classloader -> classname 但由于某些类混淆了,导致找不到类
    Activity相关异常
    1. 找不到Activity
      加载某个商品图标,在未加载成功的情况下,退出activity.待图标加载成功后,出现crash
      进行判空操作
    1. 不能实例化Activity

    AndroidManifest.xml中未注册

    序列化相关异常
    窗口句柄泄漏

    窗口还在,activity被销毁了
    activity A依附于 Activity B,当依附的ActivityB 产生错误时,Activity因为没有了靠山而产生错误(或者调用了一个已经被finish()的Activity)

    不建议在子线程更新UI,会因此产生不可预知的错误

    资源相关的异常
    系统碎片化相关异常
    1. 一方面是和Android系统的版本不同有关
    2. 另一方面和ROM的不同有关
    1. NosuchMethodError
      java.lang.NoSuchMethodError
      解决: Android Lint检查是否有警告
      做版本判断
    SecurityException
    1. Intent中图片太大
    1. 动态加载其他apk的activity
    1. No permission to modify thread
      Android 4.0.4 系统都会有这个问题
      有些手机的ROM出于安全考虑,则会禁止这些权限

    Package manager has died

    1. Package manager has died at ...
      PackageManger如果已经died,说明该进程已经不存在了,此时任何向它进行的请求都将失效,让设备重启可能是个好方法,
      App本身已经处于崩溃状态,这个时候如果App已经弹出错误框,再调用PackageManager也会出错或卡死

    相关文章

      网友评论

          本文标题:Android常见问题、定位、解决

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