ANR和FC

来源:互联网 发布:原生js返回顶部火箭 编辑:程序博客网 时间:2024/06/07 23:31

1. ANR的定义(Application Not Responding)

翻译过来就是应用程序无响应,此时正在运行的应用程序会变得很慢,反应不灵敏(一般来说,超过100毫秒的时间用户就会感知到阻滞感)
这三点,如果你在主线程里这样做,当然会使主线程阻塞啦。
1. 创建UI控件
2. 更新UI控件状态
3. 事件处理

解决办法其实很简单,为每一个耗时的操作都开一个子线程,分别在子线程里执行,然后把结果通过Handler来传递给主线程,然后主线程负责进行做出对应的处理。

2. FC的定义(Forced Close)

翻译过来就是被迫退出,程序或ROM出现了比较严重的错误,必须退出重启。原因大概有一下
1. Error
- OOM(out of memory error) 内存耗尽
- StackOverFlowError 堆栈溢出
2. RuntimeException 运行时错误

以上的问题大多是我们写代码时犯下的逻辑错误或者优化做的非常差,这是绝对绝对不允许出现的。至于解决办法就是DEBUG你懂得。常用的方法无非就是Log打印日志或者借助工具(例如强大的curl,等我用熟了再写一篇来介绍一下它,好的),其实能够熟练运用logcat,明白log各段的大致意思、擅于运用Filter就能够解决大多数问题了。

logcat

  1. logcat日志中的优先级/tag标记:
    android输出的每一条日志都有一个标记和优先级与其关联。
    优先级是下面的字符,顺序是从低到高:
    V — 明细 verbose(最低优先级)
    D — 调试 debug(Log.d在这里显示)
    I — 信息 info
    W — 警告 warn
    E — 错误 error
    F — 严重错误 fatal
    S — 无记载 silent
  2. 如果想在在手机内记录logcat需要添加许可
<uses-permission android:name="android.permission.READ_LOGS" />

手机内取得log

   try {           ArrayList<String> commandLine = new ArrayList<String>();           commandLine.add( "logcat");           commandLine.add( "-d");           commandLine.add( "-v");           commandLine.add( "time");           commandLine.add( "-s");           commandLine.add( "tag:W");           Process process = Runtime.getRuntime().exec( commandLine.toArray( new String[commandLine.size()]));           BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream()), 1024);           String line;           while ((line = bufferedReader.readLine()) != null) {               log.append(line);               log.append("\n");           }       } catch ( IOException e) {       }
0 0