android ANR报错异常处理

ANR 是android开发中常见的异常,报错的原因多种多样,还需要根据具体的现象找原因。

通常最常见的是在处理耗时的任务或者连接时间过长会导致ANR

1. 

10-27 09:08:37.031   648  1118 E ActivityManager:  +0% 924/kworker/2:0: 0% user + 0% kernel
10-27 09:08:37.031   648  1118 E ActivityManager:  +0% 1014/logcat: 0% user + 0% kernel
10-27 09:08:37.031   648  1118 E ActivityManager: 80% TOTAL: 5.6% user + 31% kernel + 24% iowait + 18% softirq
10-27 09:08:37.031   648  1118 E ActivityManager: CPU usage from 350044ms to 350044ms ago (1970-01-01 03:30:00.000 to 1970-01-01 03:30:00.000) with 0% awake:
10-27 09:08:37.031   648  1118 E ActivityManager: 0% TOTAL: 0% user + 0% kernel
10-27 09:08:37.056   648  1118 I ActivityManager: Killing 918:com.ync.menu/1000 (adj -800): bg anr
10-27 09:08:37.057   648  1118 D ActivityManager: Completed ANR of com.ync.menu in 2145ms, latency 139ms
10-27 09:08:37.061   648  1119 I DropBoxManagerService: add tag=system_app_anr isTagEnabled=true flags=0x2
10-27 09:08:37.179   648  1002 I ActivityManager: Process com.ync.menu (pid 918) has died: pers PER
10-27 09:08:37.181   648  1002 W ActivityManager: Scheduling restart of crashed service com.ync.menu/.system.CpServicein 0ms for persistent
10-27 09:08:37.182   304   304 I Zygote  : Process 918 exited due to signal 9 (Killed)
10-27 09:08:37.183   648   743 I libprocessgroup: Successfully killed process cgroup uid 1000 pid 918 in 124ms
10-27 09:08:37.183   648   743 I libprocessgroup: Successfully killed process cgroup uid 1000 pid 918 in 0ms
10-27 09:08:37.192   648  1002 W ActivityManager: Re-adding persistent process ProcessRecord{f4c15d9 918:com.ync.menu/1000}
10-27 09:08:37.200   648  1002 D CompatibilityChangeReporter: Compat change id reported: 135634846; UID 1000; state: DISABLED
10-27 09:08:37.221   304   304 D Zygote  : Forked child process 1120
10-27 09:08:37.225   648   735 I ActivityManager: Start proc 1120:com.ync.menu/1000 for restart com.ync.menu
10-27 09:08:37.548  1120  1120 I Zygote  : seccomp disabled by setenforce 0
 

由于在耗时任务在主线程中执行导致ANR

将任务放到子线程中处理

        new Thread(new Runnable() {
                @Override
                public void run() {

                //...............耗时任务---------

     }
   }).start();

2.或者在主线程进行循环处理耗时任务时刷新UI这样也是会报ANR,我们也可以给个子线程让任务单独处理,主线程可以处理其他事情,等子线程任务处理完成后在去处理其他事情,这样可以避免报ANR 异常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值