zoukankan      html  css  js  c++  java
  • Android


    Application Not Responding

    在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。

    ANR排错

    1、ANR排错一般有三种情况

    • KeyDispatchTimeout(5 seconds) –主要类型按键或触摸事件在特定时间内无响应
    • BroadcastTimeout(10 secends) –BroadcastReceiver在特定时间内无法处理完成
    • ServiceTimeout(20 secends) –小概率事件 Service在特定的时间内无法处理完成
      发生原因
      主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。
      主线程中存在耗时的计算
      主线程中错误的操作,比如Thread.wait或者Thread.sleep等 Android系统会监控程序的响应状况
      使用AsyncTask处理耗时IO操作。

    2、如何避免

    UI线程尽量只做跟UI相关的工作
    耗时的操作(比如数据库操作,I/O,连接网络或者别的有可能阻塞UI线程的操作)把它放在单独的线程处理
    尽量用Handler来处理UIthread和别的thread之间的交互.
    使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同。
    使用Handler处理工作线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程。
    Activity的onCreate和onResume回调中尽量避免耗时的代码
    BroadcastReceiver中onReceive代码也要尽量减少耗时,建议使用IntentService处理。

    3、ANR定位和修正
    如果开发机器上出现问题,我们可以通过查看/data/anr/traces.txt即可,最新的ANR信息在最开始部分。



    作者:Maat红飞
    链接:http://www.jianshu.com/p/89f19d67b348
  • 相关阅读:
    BZOJ 3236: [Ahoi2013]作业
    BZOJ 3234: [Ahoi2013]立方体
    BZOJ 3235: [Ahoi2013]好方的蛇
    Hadoop 系列HDFS的Java API( Java API介绍)
    Hadoop 系列 HDFS 的JavaAPI Windows+IDEA+HDFS快速入门
    Hadoop 系列 HDFS:分布式文件系统(HDFS参数解读)
    Hadoop 系列 HDFS:分布式文件系统(HDFS集群模式)
    Hadoop 系列 HDFS:分布式文件系统(HDFS文件读写)
    Hadoop 系列 HDFS:分布式文件系统( HDFS概述)
    Hadoop中DataNode没有启动解决办法
  • 原文地址:https://www.cnblogs.com/qlky/p/7325670.html
Copyright © 2011-2022 走看看