• ANR


    出现类型:

    1、按键或触摸事件在规定事件内未响应。

    2、BroadcastReceiver在特定时间内未完成处理。

    3、小概率service在特定时间内为完成处理。

      常见的超时引发的ANR

    Activity: onCreate(), onResume(), onDestroy(), 
    onKeyDown(), onClick()等,超时时间5s
    
    Application: onCreate(), onTerminate()等,超时时间5s
    
    Service: onCreate(), onStart(), onDestroy()等,超时时间20s
    
    BroadcastReceiver:onReceiver(),前台APP广播超时时间是10s,后台App是60s

      AsyncTask: onPreExecute(), onProgressUpdate(), onPostExecute(), onCancel()等,超时5s
      Mainthread handler: handleMessage(), post*(runnable r)等,超时5s

    导致原因:

    1、高耗时的操作,如图像变换

    2、磁盘读写,数据库读写操作

    3、大量的创建新对象

    如何避免:

    1、UI线程尽量只做跟UI相关的工作

    2、耗时的操作(比如数据库操作,I/O,连接网络或者别的有可能阻塞UI线程的操作)把它放在单独的线程处理

    3、尽量用Handler来处理UIThread和别的Thread之间的交互

    4、解决的逻辑

    (1)使用AsyncTask

      在doInBackground()方法中执行耗时操作

      在onPostExecuted()更新UI

    (2)使用Handler实现异步任务

      在子线程中处理耗时操作

      处理完成之后,通过handler.sendMessage()传递处理结果

      在handler的handleMessage()方法中更新UI

      或者使用handler.post()方法将消息放到Looper中

    捕获ANR异常信息:

      app在产生ANR异常后,会将异常信息写入"/data/anr/traces.txt"文件我们可以通过收集用户的这个文件,就可以来获取用户产生ANR的地方了。

  • 相关阅读:
    神经网络-FPN 19
    机器学习
    神经网络-DenseNet 18
    神经网路骨架:各自的特点统计
    转载:一步一步制作根文件系统
    设计模式博客
    【转】PowerPC平台linux设备移植
    【收藏】自己动手写编译器、连接器
    查看pthread线程库中锁的持有者方法
    【转】深入 Linux 的进程优先级
  • 原文地址:https://www.cnblogs.com/yl-saber/p/7196224.html
Copyright © 2020-2023  润新知