ANR和FC

本文详细介绍了Android应用中的ANR(Application Not Responding)和FC(Forced Close)问题。ANR通常发生在主线程执行耗时操作导致阻塞,解决方案是将耗时任务放在子线程中。FC则是由于程序或ROM严重错误导致的被迫退出,如内存耗尽或堆栈溢出。解决FC问题通常依赖于DEBUG和日志分析,尤其是logcat的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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) {
       }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值