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 异常。

你可能感兴趣的:(android线程,Tv开发,android,android,studio,java)