• 记一次ANR文件的导出


    1.老版Android系统 anr的导出

    在项目目录下或app下运行命令:

     adb pull data/anr/traces.txt
    

    测试了华为p7(Android 5.1.1)和荣耀v10(Android 9),发现都能正常导出。但是遇到华为mate10、mate10 pro 一直都导出失败。

    adb: error: failed to stat remote object 'data/anr/traces.txt': No such file or directory
    

    查了些资料,发现厂商有对这块做优化。以前anr一直放在traces文件中,多次出现有覆盖的问题。高版本厂商做了优化,会根据时间戳分别生成一个文件,打包导出。

    2.高版本导出方案

    1.查看是否存在traces。

    adb shell    
    cd data/anr
    ls -a      //列出所有文件
    

    当前anr文件列表这时尝试用命令导出:

     D:codegithupAndroidReViewapp>adb pull data/anr/anr_2019-01-30-13-35-18-005
    adb: error: failed to copy 'data/anr/anr_2019-01-30-13-35-18-005' to '.anr_2019-01-30-13-35-18-005': remote open failed: Permission denied
    

    提示权限拒绝,我们无法想之前一样导出anr目录下某个文件。

    解决方案:

    adb bugreport
    

    bugreport日志信息
    此命令会导出一个zip压缩包,解压后在FS/data/anr目录下就可以看到traces文件了。

    • adb bugreport 命令也可以指定文件导出目录,如导出到桌面:adb bugreport C:UsersNxinDesktop ;不指定时会在当前命令行对应目录下导出压缩包。

    3.ANR的缘由

    产生anr的情况有:
    (1)Activity按键或触摸事件在特定时间内无响应(5s)
    (2)Service在特定时间内无法处理完成(20s)
    (3)BroadcastReceiver在特定时间内无法处理完成(10s)

    开发中主要多发在第一种情况,在主线程做了耗时操作,导致堵塞,然后触发点击事件,无法及时响应,开发中复杂的业务可以转到子线程去实现,主线程尽量做UI操作。

    提供一个anr的调试代码:

    @Override
        public void onClick(View v) {
            int i = v.getId();
            if (i == R.id.btn_one) {
                L.i(initTag(), "开始阻塞主线程");
                try {
                    Thread.sleep(15000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                L.i(initTag(), "结束阻塞主线程");

            } else if (i == R.id.btn_two) {
                L.i(initTag(), "点击第二个按钮");
            }
        }

    点击第一个按钮后,立刻多次触发第二个按钮,就会有anr了。

    转载:https://blog.csdn.net/denglusha737/article/details/86706909

  • 相关阅读:
    Flink Window那些事——ProcessWindowFunction/ProcessAllWindowFunction
    Flink Window那些事——AggregateFunction窗口函数
    Flink Window那些事——ReduceFunction窗口函数
    Flink Window那些事——Window小分类(Window Assinger类型)
    Flink Window那些事——Window大分类/生命周期/分配器
    nginx配置相同端口号访问多个项目
    Flink从socket读取数据sink到redis
    Flink基本API的使用二
    Flink基本API的使用一
    hadoop高可用集群搭建
  • 原文地址:https://www.cnblogs.com/yatou-de/p/13853979.html
Copyright © 2020-2023  润新知