Android ANR问题介绍和处理方法

来源:互联网 发布:中信证券交易软件下载 编辑:程序博客网 时间:2024/06/05 07:24

什么是ANR

在Android上,如果您的应用程序有一段时间未响应,系统则会向用户显示一个对话框,这个对话框则成为程序无响应(ANR:Application Not Respoding)。虽然

用户可以选择让程序继续运行下去,但是这极大地影响了用户体验,在开发中需要极力避免这种问题的发生。

ANR的分类

一般分为3种:

1:KeyDispatchTimeout(5 seconds) –主要情况 :按键或触摸事件在特定时间内无响应,常常发生在Activity中。

2:BroadcastTimeout(10 seconds)  :BroadcastReceiver在特定时间内无法处理完成。

3:ServiceTimeout(20 seconds) –小概率类型 : Service在特定的时间内无法处理完成,

ANR的解决和避免方法

在Android程序中,ANR是非常普遍存在的,我们在使用一些app时也经常会出现让ANR的情况,那么作为一个开发者,我们该如何避免这个问题呢?

1、主线程中,程序应该尽量少进行程序执行,Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。(可以采用重新开启子线程的方式,然后使用Handler+Message的方式做一些操作,比如更新主线程中的ui等)

2、应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不要在子线程里去做这些事情(因为 BroadcastReceiver的生命周期短)。而应该让应用程序应该启动一个 Service。

3、避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应Intent广 播时需要向用户展示什么,你应该使用Notification Manager来实现。

0 0
原创粉丝点击