Android常见问题、定位、解决

简介

安卓常见问题的功能表现
问题定位
解决优化方案
监控治理
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常见问题、定位、解决)