• 0755-82538016
  • 0755-82560826
  • 深圳网站建设_APP小程序开发_博纳网络

    • 网站建设案例
      • ";

        营销网站建设

        全网营销网站

        高端网站建设

        商城网站建设

        外贸网站建设

        小程序开发

        区块链开发

        物联网项目开发

        定制app开发

        在线教育网站

        速成网站建设

        服装网站建设

        餐饮网站建设

        珠宝首饰网站

        机械制造网站

        文化旅游网站

        家装建材网站

        美容化妆品网站

        数码产品网站

        模板案例库

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 网站推广
      • ";

        网站优化基础

        建站优化

        网站优化

        营销推广

        整站优化

        推广帮助

        谷歌搜索

        推广方案

        推广套餐

        推广技巧

        百度排名

        巧用微博推广

        直播视频网站推广法

        微信推广网站方法

        网站外链推广

        公共微信号推广

        网站优化闲谈

        常见问题

        公司资讯

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 网站制作资讯
      • ";

        网站制作

        外贸网站建设

        网站设计

        网站代运营

        深圳网站建设专栏

        深圳小程序开发

        网站改版

        APP开发

        网站建设方案

        安全维护

        软件开发

        平台搭建

        建站行业资讯

        域名注册

        虚拟主机

        企业邮局

        国外主机

        VPS独享空间

        免备案香港服务器

        如何解析域名

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 网站报价
      • ";

        网站报价

        建站方案

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 公司动态
      • ";
        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 关注博纳
      • ";

        网站制作精英团队

        网站建设公司愿景

        公司介绍

        主营业务

        博纳文化

        加入博纳

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 联系我们
      • ";

        网站建设公司联系方式

        网站建设、网站制作公司乘车路线

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
      网站制作资讯

      当前位置:

        主页网站制作资讯APP开发安卓APP项目开发怎样解决ANR异常的处理?

      安卓APP项目开发怎样解决ANR异常的处理?

      发布时间:2019-04-24

      文章编辑:网站建设 文章来源:APP开发 浏览量:次

        安卓APP项目开发怎样解决ANR异常的处理?深圳APP开发公司认为ANR(ApplicationNotResponding)即“应用程序无响应”。在Android系统中,如果APP没有在某个限定的时间内完成某个事件或消息的处理,系统会显示一个对话框,提示用户APP没有响应,用户可以选择继续等待或者关闭这个应用程序,如图21-1所示。
      在ActivityManagerService.java中,定义了如下ANR的超时时间:
      // How long we allow a receiver to run before giving up on it. static final int BROADCAST_ FG_ TIMEOUT = 10* 1000; static final int BROADCAST_ BG_ TIMEOUT = 60* 1000; // How long we wait until we timeout on key dispatching. static final int KEY_ DISPATCHING_ TIMEOUT = 5* 1000;
        BROADCAST_FG_TIMEOUT和BROADCAST_BG_TIMEOUT分别对应前台广播和后台广播。目前遇到得比较多的情况是对按键或触屏操作的处理没有在5秒内完成,此种情况通常发生在APP的主线程,可以使用简单记录数值的方法,判断主线程的运行状况。具体实现方式如下所示。创建一个Service类,在此Service运行的时候检测主线程的运行状况,代码如下:
      // How long we wait for a service to finish executing. static final int SERVICE_ TIMEOUT = 20* 1000;
      // How long we wait for a service to finish executing. static final int SERVICE_ BACKGROUND_ TIMEOUT = SERVICE_ TIMEOUT * 10
        SERVICE_TIMEOUT和SERVICE_BACKGROUND_TIMEOUT分别对应前台Service和后台Service。SERVICE_TIMEOUT和SERVICE_BACKGROUND_TIMEOUT分别对应前台Service和后台Service。如果APP没有在某个限定的时间内完成某个事件或消息的处理,系统会显示一个对话框,提示用户APP没有响应,用户可以选择继续等待或者关闭这个应用程序,如图21-1所示。目前遇到得比较多的情况是对按键或触屏操作的处理没有在5秒内完成,此种情况通常发生在APP的主线程,可以使用简单记录数值的方法,判断主线程的运行状况。具体实况方式如下所示。创建一个Service类,在此Service运行的时候检测主线程的运行状况,代码如下:
      public class ANRService extends Service {     private String TAG = "ANRService ";     private int workThreadTick = 0;     private int mainThreadTick = 0;     private boolean flag = true;    // 主 线程 ANR 超时 时间     private int mainThreadTimeOut = 5000;     private Handler mHandler = new Handler();    @ Override     public IBinder onBind( Intent intent) {         return null;    }    @ Override     public void onCreate() {         super. onCreate();         exception();
       }     private void exception(){         new Thread( new Runnable() {            @ Override             public void run() {                 while( flag){                     workThreadTick = mainThreadTick;                    // 向 主线 程 发送 消息 计数器 值 加 1                     mHandler. post( tickerRunnable);                     try {                         Thread. sleep( mainThreadTimeOut);                    } catch (InterruptedException e) {                         e. printStackTrace();                    }                    // 子 线程 在 等待 5 秒 后, 判断 子 线程 和 主 线程 的 变量 值 是否 相等; 如果 相等, 意味着 主 线程 在 5 秒 内 没有 处理 完 子 线程 发 的 消息, 发生了 ANR 异常                     if( workThreadTick == mainThreadTick){                         flag = false;                        // 获取 并 打印 主 线程 的 堆栈 信息
      Thread mainThread = Looper. getMainLooper(). getThread();                         StackTraceElement[] stackElements = mainThread. getStackTrace();                         String stackString = "ANR Exception\ n";                         if (stackElements != null) {                             for (int i = 0; i < stackElements. length; i++) {                                 stackString = stackString + stackElements[ i]. getClassName() + "."                                        + stackElements[ i]. getMethodName() + " ("                                        + stackElements[ i]. getFileName() + ":"                                        + stackElements[ i]. getLineNumber() + ")" + "\n";                            }                             Log. e( TAG, stackString);                        }                    }                }            }        }). start();    }
        private final Runnable tickerRunnable = new Runnable() {        @ Override public void run() {             mainThreadTick = (mainThreadTick + 1) % 10;        }    }; }
       
      在AndroidManifest.xml文件中,增加ANRService类的声明,代码如下:
      < service android: name=" com. ruwant. eam. service. ANRService"></ service>
      在创建MainActivity时启动ANRService,代码如下:
      @Override protected void onCreate( Bundle savedInstanceState) {     super. onCreate( savedInstanceState);     setContentView( R. layout. activity_ main);     serviceIntent = new Intent( MainActivity. this, ANRService. class);     startService( serviceIntent);}
      设置点击按钮时,主线程休眠6秒,通过这种方式验证ANRService是否能正常工作,检测到ANR的发生。代码如下:
      scanButton = (Button) findViewById( R. id. scan_ button); scanButton. setOnClickListener( new Button. OnClickListener(){     public void onClick( View v){         scanData();    } }); private void scanData(){     Log. e( TAG," scanData");     try {         Thread. sleep( 6* 1000);    }     catch (InterruptedException e) {         e. printStackTrace();    } }

      运行APP,然后点击按钮,打印如下Log。
      01- 21 15: 23: 56. 543 12233- 12233/ com. ruwant. eam E/ MainActivity: scanData 01- 21 15: 24: 01. 577 12233- 12291/ com. ruwant. eam E/ ANRService: ANR Exception
      lang. Thread. sleep( Thread. java:- 2) java. lang. Thread. sleep( Thread. java: 1046) java. lang. Thread. sleep( Thread. java: 1000) com. ruwant. eam. activity. MainActivity. scanData( MainActivity. java: 199) com. ruwant. eam. activity. MainActivity. access$ 400( MainActivity. java: 39) com. ruwant. eam. activity. MainActivity$ 5. onClick (MainActivity. java: 154) android. view. View. performClick( View. java: 5264) android. view. View. View$ PerformClick. run( View. java: 21297) android. os. Handler. handleCallback (Handler. java: 743) android. os. Handler. dispatchMessage (Handler. java: 95) android. os. Looper. loop( Looper. java: 150) android. app. ActivityThread. main( ActivityThread. java: 5546) java. lang. reflect. Method. invoke( Method. java:- 2)
      com. android. internal. os. ZygoteInit$ MethodAndArgsCaller. run( ZygoteInit. java: 794) com. android. internal. os. ZygoteInit. main( ZygoteInit. java: 684)
      从Log中可以看出,点击按钮5秒后,ANRService检测到了ANR异常,并打印出了发生异常时的堆栈信息,其中记录了发生异常的类名、方法名和代码行数。这样,就实现了对ANR异常的检测和记录异常信息,方便分析和解决问题。
        APP开发公司提醒在开发过程中,对于可能出现异常的地方尽量用try…catch…捕获异常,这样可以针对不同的异常给用户显示不同的提示信息,并对程序做不同的处理,用户体验性也比较好。在处理异常的时候,尽量少重启APP,以便给用户良好的用户体验。也可以使用友盟和OneAPM之类的SDK,其中有捕获程序崩溃日志,并将其发送到服务器的功能。好了,APP开发公司本文关于“安卓APP项目开发怎样解决ANR异常的处理?”的知识就分享到这里,谢谢关注,博纳网络编辑整理。
       
       

      当前文章链接:/construction/appkaifa/2625.html
      上一篇:APP开发怎样解决使用try…catch…处理异常? 下一篇:开发APP我们怎样解决Android的本地存储?
      返回列表
      如果您觉得案例还不错请帮忙分享:

      [声明]本网转载网络媒体稿件是为了传播更多的信息,此类稿件不代表本网观点,本网不承担此类稿件侵权行为的连带责任。故此,如果您发现本网站的内容侵犯了您的版权,请您的相关内容发至此邮箱【qin@198bona.com 】,我们在确认后,会立即删除,保证您的版权。

      相关案例推荐

      • 美爱美

        美爱美

        商城门户

        美爱美

      • 富家汽车行业网站建设案例

        富家汽车行业网站建设案例

        行业网站

        富家汽车行业网站建设案例

      • 东宝详装修设计网站制作案例

        东宝详装修设计网站制作案例

        装饰/设计

        东宝详装修设计网站制作案例

      资讯分类

      • 网站制作
      • 外贸网站建设
      • 网站设计
      • 网站代运营
      • 深圳网站建设专栏
      • 深圳小程序开发
      • 网站改版
      • APP开发
      • 网站建设方案
      • 安全维护
      • 软件开发
      • 平台搭建
      • 建站行业资讯
      • 域名注册
      • 虚拟主机
      • 企业邮局
      • 国外主机
      • VPS独享空间
      • 免备案香港服务器
      • 如何解析域名

      最新发布

      • 社区APP开发上线后影响用户使用的粘性有哪些?
      • 为什么说大健产业O2OAPP开发潜力无限
      • 网络公司对社区O2OAPP开发基本认识
      • 工业4.0时代怎样做好一个APP的开发工作?
      • APP开发公司分析APP应用开发下一个巨头在哪些领域?
      • APP电子商务平台开发前景如何?
      • 社交类型APP开发需要具备的五个必要条件
      • 社交类型APP平台开发使用小程序还是APP模式好?
      • 使用HTML语言开发APP商城可以吗?
      • 社区O2OAPP开发的方向选择

      相关资讯

      • APP网站制作流程以及栏目分布
      • 企业网站优化人员面对搜索引擎的困惑
      • 企业门户网站如何做好针对搜索引擎的优化工作
      • APP/PC购物商城网站如何做好产品图片的优化技巧
      • 网站软文内容以及网站外链存在的几种形式对网站有多大影响
      • 如何做好网站软文标题的描述更适合搜索引擎的需要?
      • 网站建设好后期出现被搜索引擎降权的几个主要因素
      • 小程序开发制作前途取决于市场,别被您的同行抢了先机
      • APP开发公司提醒您关注:电商平台要求商家“二选一”引多方不满 专家提建议
      • APP为什么会在我们的手机界面上变成僵尸图标?

      热门搜索

      • 福田网站建设
      • APP开发
      • 深圳网站制作
      • 手机网站建设
      • 网站建设方案
      • 企业网站制作
      • 网站制作
      • APP开发公司
      • 公司网站制作
      • 网站建设开发

      Copyright © 2021 博纳网络 版权所有  粤ICP备17054727号

      • 🏠

        首页

      • 💬

        咨询

      • 📞

        通话

      • 📂

        案例

      • ⬆

        返回