精华内容
下载资源
问答
  • Android处理ANR步骤

    2016-09-20 15:10:47
    ANR Android android events.log system.log

    定位ANR发生时间

    查看events.log日志

    搜索 am_anr 来获取时间.

    例如: 09-08 19:52:54.585 I/am_anr (1499): [17151,com.xincm.pps,…]

    初步定位ANR原因

    查看 system.log日志

    根据已经定位好的ANR发生时间,定位日志

    搜索“CPU usage from”查看出现ANR前后CPU使用情况.

    分析ANR的类型

    1. 根据CPU使用情况 TOTAL 100% 说明CPU负荷过载
    2. 未完待续
    展开全文
  • Android CRASH ANR 日志收集需求:如图image-20180919183318650.png收集实现方式image-20180919173220331.png通过现成的bugly收集 在bugly上报crash 或anr之前先将错误信息写入本地磁盘/*** Crash处理.** @param ...

    Android CRASH ANR 日志收集

    需求:如图

    1c621f0b11c8?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    image-20180919183318650.png

    收集实现方式

    1c621f0b11c8?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    image-20180919173220331.png

    通过现成的bugly收集 在bugly上报crash 或anr之前先将错误信息写入本地磁盘

    /**

    * Crash处理.

    *

    * @param crashType 错误类型:CRASHTYPE_JAVA,CRASHTYPE_NATIVE,CRASHTYPE_U3D ,CRASHTYPE_ANR

    * @param errorType 错误的类型名

    * @param errorMessage 错误的消息

    * @param errorStack 错误的堆栈

    * @return 返回额外的自定义信息上报

    */

    @Override

    public Map onCrashHandleStart(int crashType, String errorType,

    String errorMessage, String errorStack) {

    LinkedHashMap map = new LinkedHashMap();

    map.put("设备序列号","test");

    Log.i("bugly_test",crashType+errorType+errorMessage);

    return map;

    }

    不过目前上述方案都存在一些问题

    第一种方案 只有系统app才有权限访问该文件夹。查看了sunmi sendcrash的实现(这个是系统应用 所以能读取到/data/system/dropbox)。

    监听到日志被添加的广播->读取/data/system/dropbox内容->写入外部存储/sdcard/crash.log文件

    所以说summi上装了sendcrash应用 美易点就在crash.log中能读取到需要收集的信息

    第二种方案:系统崩溃都能获取到 但是一个很尴尬的地方Android6.0后的设备无法上传ANR信息

    还是由于系统权限的限制导致bugly 无法查看trace.txt文件引起。不过这部分信息非常关键 分析线上的一些特别异常问题就需要这部份信息.

    上报方式

    将日志写入文件上报中控点 击多次一条条上报 不过要做好一些限制和考虑一些会存在的问题

    文件的大小是否要做下限制(太大了不行)

    同一条记录是否允许多次上报

    多条上报时一条失败是否都终止(避免对服务器造成压力)

    这样一条条上报其实对查询日志不友好 后台日志会多很多zip日志包

    界面

    对日志的条数和时间做下限制。

    建议

    关于收集 建议是设备厂商给我们开放一下读取权限 目前只能在商米设备上实现收集需要的全部信息

    关于上报 根据上文上报方式里的问题

    建议:其实上面的上报日志一些问题不管在美易点还是全能POS都有自己的解决方案和实现方式

    1.上报日志的时候讲这些日志添加到应用日志中

    2.美易点本身有上报到KB的逻辑 这个查起来也很方便

    3.如果还是这个方案 建议和中控其他日志分开不然后面查询过滤比较麻烦

    关于界面 限制日志条数和时间来提升交互效果及体验(太多影响内存)

    展开全文
  • 很多初入Android开发的网友可能发现ANR的字样,到底Android ANR是什么其实ANR就是Application Not Responding的全称,当某个应用处于长期假死状态时Android系统会弹出一个窗口上面写道,XXX is not responding给出两...

    很多初入Android开发的网友可能发现ANR的字样,到底Android ANR是什么其实ANR就是Application Not Responding的全称,当某个应用处于长期假死状态时Android系统会弹出一个窗口上面写道,XXX is not responding给出两个按钮一个为force close一个为wait。

    226e66c099c4f910498ae10b9c143cc8.png

    什么引发了ANR?

    在Android里,应用程序的响应性是由Activity Manager和Window Manager系统服务监视的。当它监测到以下情况中的一个时,Android就会针对特定的应用程序显示ANR:

    在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸)

    BroadcastReceiver在10秒内没有执行完毕

    1. 执行耗时的运算,这时,应用程序的主线程就不能再处理用户的输入事件。经过一定的时间后( Android默认为超过5000ms即5秒开始弹出ANR窗口),系统认为应用程序已经挂起,并显示ANR来让用户选择杀死应用程序。

    2.长时间的I/O处理,比如读写大文件,网络访问时造成的阻塞

    如何避免ANR

    考虑上面的ANR定义,让我们来研究一下为什么它会在Android应用程序里发生和如何最佳构建应用程序来避免ANR。

    Android应用程序通常是运行在一个单独的线程(例如,main)里。这意味着你的应用程序所做的事情如果在主线程里占用了太长的时间的话,就会引发ANR对话框,因为你的应用程序并没有给自己机会来处理输入事件或者Intent广播。

    因此,运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。然而,不是说你的主线程阻塞在那里等待子线程的完成——也不是调用Thread.wait()或是Thread.sleep()。替代的方法是,主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。以这种方式设计你的应用程序,将能保证你的主线程保持对输入的响应性并能避免由于5秒输入事件的超时引发的ANR对话框。这种做法应该在其它显示UI的线程里效仿,因为它们都受相同的超时影响。

    IntentReceiver执行时间的特殊限制意味着它应该做:在后台里做小的、琐碎的工作如保存设定或者注册一个Notification。和在主线程里调用的其它方法一样,应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是在子线程里做这些任务(因为BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个Service。顺便提及一句,你也应该避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应Intent广播时需要向用户展示什么,你应该使用Notification Manager来实现。

    增强响应灵敏性

    一般来说,在应用程序里,100到200ms是用户能感知阻滞的时间阈值。因此,这里有一些额外的技巧来避免ANR,并有助于让你的应用程序看起来有响应性。

    如果你的应用程序为响应用户输入正在后台工作的话,可以显示工作的进度(ProgressBar和ProgressDialog对这种情况来说很有用)。  特别是游戏,在子线程里做移动的计算。

    如果你的应用程序有一个耗时的初始化过程的话,考虑可以显示一个Splash Screen或者快速显示主画面并异步来填充这些信息。在这两种情况下,你都应该显示正在进行的进度,以免用户认为应用程序被冻结了。

    展开全文
  • android-ANR异常处理

    2015-07-16 14:45:15
    [转]Android ANR 分析解决方法一:什么是ANRANR:Application Not Responding,即应用无响应二:ANR的类型ANR一般有三种类型: KeyDispatchTimeout(5 seconds) –主要类型按键或触摸事件在特定时间内无响应 Broadcast...

    [转]Android ANR 分析解决方法

    一:什么是ANR

    ANR:Application Not Responding,即应用无响应

    二:ANR的类型

    ANR一般有三种类型:

    1. KeyDispatchTimeout(5 seconds) –主要类型按键或触摸事件在特定时间内无响应

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

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

    三:KeyDispatchTimeout

    Akey or touch event was not dispatched within the specified time(按键或触摸事件在特定时间内无响应)

    具体的超时时间的定义在framework下的ActivityManagerService.java

    //How long we wait until we timeout on key dispatching.

    staticfinal int KEY_DISPATCHING_TIMEOUT = 5*1000

    四:为什么会超时呢?

    超时时间的计数一般是从按键分发给app开始。超时的原因一般有两种:

    (1)当前的事件没有机会得到处理(即UI线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了)

    (2)当前的事件正在处理,但没有及时完成

    五:如何避免KeyDispatchTimeout

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

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

    3. 尽量用Handler来处理UIthread和别的thread之间的交互

    六:UI线程

    说了那么多的UI线程,那么哪些属于UI线程呢?

    UI线程主要包括如下:

    1. Activity:onCreate(), onResume(), onDestroy(), onKeyDown(), onClick(),etc

    2. AsyncTask: onPreExecute(), onProgressUpdate(), onPostExecute(), onCancel,etc

    3. Mainthread handler: handleMessage(), post*(runnable r), etc

    4. other

    七:如何去分析ANR

    先看个LOG:

    04-01 13:12:11.572 I/InputDispatcher( 220): Application is not responding:Window{2b263310com.android.email/com.android.email.activity.SplitScreenActivitypaused=false}.
    5009.8ms since event, 5009.5ms since waitstarted
    04-0113:12:11.572 I/WindowManager( 220): Input event
    dispatching timedout sending
    tocom.android.email/com.android.email.activity.SplitScreenActivity

    04-01 13:12:14.123 I/Process( 220): Sending signal. PID: 21404 SIG: 3---发生ANR的时间和生成trace.txt的时间
    04-01 13:12:14.123 I/dalvikvm(21404):threadid=4: reacting to 
    signal 3 
    ……
    04-0113:12:15.872 E/ActivityManager( 220): ANR in 
    com.android.email(com.android.email/.activity.SplitScreenActivity)
    04-0113:12:15.872 E/ActivityManager( 220): 
    Reason:keyDispatchingTimedOut 
    04-0113:12:15.872 E/ActivityManager( 220): Load: 8.68 / 8.37 / 8.53
    04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 4361ms to 699ms ago ----CPU在ANR发生前的使用情况
    
    04-0113:12:15.872 E/ActivityManager( 220): 5.5%21404/com.android.email: 1.3% user + 4.1% kernel / faults:
    10 minor
    04-0113:12:15.872 E/ActivityManager( 220): 4.3%220/system_server: 2.7% user + 1.5% kernel / faults: 11
    minor 2 major
    04-0113:12:15.872 E/ActivityManager( 220): 0.9%52/spi_qsd.0: 0% user + 0.9% kernel
    04-0113:12:15.872 E/ActivityManager( 220): 0.5%65/irq/170-cyttsp-: 0% user + 0.5% kernel
    04-0113:12:15.872 E/ActivityManager( 220): 0.5%296/com.android.systemui: 0.5% user + 0% kernel
    04-0113:12:15.872 E/ActivityManager( 220): 100%TOTAL: 4.8% user + 7.6% kernel + 87% iowait
    04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 3697ms to 4223ms later:-- ANR后CPU的使用量
    04-0113:12:15.872 E/ActivityManager( 220): 25%21404/com.android.email: 25% user + 0% kernel / faults: 191 minor
    04-0113:12:15.872 E/ActivityManager( 220): 16% 21603/__eas(par.hakan: 16% user + 0% kernel
    04-0113:12:15.872 E/ActivityManager( 220): 7.2% 21406/GC: 7.2% user + 0% kernel
    04-0113:12:15.872 E/ActivityManager( 220): 1.8% 21409/Compiler: 1.8% user + 0% kernel
    04-0113:12:15.872 E/ActivityManager( 220): 5.5%220/system_server: 0% user + 5.5% kernel / faults: 1 minor
    04-0113:12:15.872 E/ActivityManager( 220): 5.5% 263/InputDispatcher: 0% user + 5.5% kernel
    04-0113:12:15.872 E/ActivityManager( 220): 32%TOTAL: 28% user + 3.7% kernel
    

    从LOG可以看出ANR的类型,CPU的使用情况,如果CPU使用量接近100%,说明当前设备很忙,有可能是CPU饥饿导致了ANR

    如果CPU使用量很少,说明主线程被BLOCK了

    如果IOwait很高,说明ANR有可能是主线程在进行I/O操作造成的

    除了看LOG,解决ANR还得需要trace.txt文件,

    如何获取呢?可以用如下命令获取

    $chmod 777 /data/anr

    $rm /data/anr/traces.txt

    $ps

    $kill -3 PID

    adbpull data/anr/traces.txt ./mytraces.txt
    从trace.txt文件,看到最多的是如下的信息:

    —–pid 21404 at 2011-04-01 13:12:14 —–
    Cmdline: com.android.email

    DALVIK THREADS:
    (mutexes: tll=0tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
    “main” prio=5 tid=1NATIVE
    | group=”main” sCount=1 dsCount=0obj=0x2aad2248 self=0xcf70
    | sysTid=21404 nice=0 sched=0/0cgrp=[fopen-error:2]
    handle=1876218976
    atandroid.os.MessageQueue.nativePollOnce(Native Method)
    atandroid.os.MessageQueue.next(MessageQueue.java:119)
    atandroid.os.Looper.loop(Looper.java:110)
    at android.app.ActivityThread.main(ActivityThread.java:3688)
    at java.lang.reflect.Method.invokeNative(Native Method)
    atjava.lang.reflect.Method.invoke(Method.java:507)

    atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
    at dalvik.system.NativeStart.main(Native Method)

    说明主线程在等待下条消息进入消息队列
    

    八:Thread状态

    ThreadState (defined at “dalvik/vm/thread.h “)

    THREAD_UNDEFINED = -1, /* makes enum compatible with int32_t */
    
    THREAD_ZOMBIE = 0, /* TERMINATED */
    
    THREAD_RUNNING = 1, /* RUNNABLE or running now */
    
    THREAD_TIMED_WAIT = 2, /* TIMED_WAITING in Object.wait() */
    
    THREAD_MONITOR = 3, /* BLOCKED on a monitor */
    
    THREAD_WAIT = 4, /* WAITING in Object.wait() */
    
    THREAD_INITIALIZING= 5, /* allocated, not yet running */
    
    THREAD_STARTING = 6, /* started, not yet on thread list */
    
    THREAD_NATIVE = 7, /* off in a JNI native method */
    
    THREAD_VMWAIT = 8, /* waiting on a VM resource */
    
    THREAD_SUSPENDED = 9, /* suspended, usually by GC or debugger */
    

    九:如何调查并解决ANR

    1. 首先分析log

    2. 从trace.txt文件查看调用stack.

    3. 看代码

    4. 仔细查看ANR的成因(iowait?block?memoryleak?)

    十:案例

    案例1:关键词:ContentResolver in AsyncTask onPostExecute, high iowait
    原因:IOWait很高,说明当前系统在忙于I/O,因此数据库操作被阻塞

    原来:

    final Message message=Message.restoreMessageWithId(mProviderContext,messageId);
    if(message==null){
    return;
    }
    Account account=Account.restoreAccountWithId(mProviderContext,message.mAccountKey);
    if(account==null){
    return;//isMessagingController returns false for null, but let’s make itclear.
    }
    if(isMessagingController(account)){
    new Thread(){
    @Override
    public void run(){
    mLegacyController.processPendingActions(message.mAccountKey);
    }}.start();
    }
    解决后:

    newThread() {
    finalMessagemessage=Message.restoreMessageWithId(mProviderContext,messageId);
    if(message==null){
    return;
    }
    Accountaccount=Account.restoreAccountWithId(mProviderContext,message.mAccountKey);
    if(account==null){
    return;//isMessagingController returns false for null, but let’s make itclear.
    }
    if(isMessagingController(account)) {
    mLegacyController.processPendingActions(message.mAccountKey);
    }
    }.start();
    关于AsyncTask:http://developer.android.com/reference/android/os/AsyncTask.html

    案例2:关键词:在UI线程进行网络数据的读写

    ANRin process: com.android.mediascape:PhotoViewer (last incom.android.mediascape:PhotoViewer)
    Annotation:keyDispatchingTimedOut
    CPU usage:
    Load: 6.74 / 6.89 / 6.12
    CPUusage from 8254ms to 3224ms ago:
    ovider.webmedia: 4% = 4% user +0% kernel / faults: 68 minor
    system_server: 2% = 1% user + 0%kernel / faults: 18 minor
    re-initialized>: 0% = 0% user + 0%kernel / faults: 50 minor
    events/0: 0% = 0% user + 0%kernel
    TOTAL:7% = 6% user + 1% kernel

    DALVIKTHREADS:
    ""main"" prio=5 tid=3 NATIVE
    |group=""main"" sCount=1 dsCount=0 s=Yobj=0x4001b240 self=0xbda8
    | sysTid=2579 nice=0 sched=0/0cgrp=unknown handle=-1343993184
    atorg.apache.harmony.luni.platform.OSNetworkSystem.receiveStreamImpl(NativeMethod)
    atorg.apache.harmony.luni.platform.OSNetworkSystem.receiveStream(OSNetworkSystem.java:478)
    atorg.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:565)
    atorg.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:87)
    atorg.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection$LimitedInputStream.read(HttpURLConnection.java:303)
    atjava.io.InputStream.read(InputStream.java:133)
    atjava.io.BufferedInputStream.fillbuf(BufferedInputStream.java:157)
    atjava.io.BufferedInputStream.read(BufferedInputStream.java:346)
    atandroid.graphics.BitmapFactory.nativeDecodeStream(Native Method)
    atandroid.graphics.BitmapFactory.decodeStream(BitmapFactory.java:459)
    atcom.android.mediascape.activity.PhotoViewerActivity.getPreviewImage(PhotoViewerActivity.java:4465)
    atcom.android.mediascape.activity.PhotoViewerActivity.dispPreview(PhotoViewerActivity.java:4406)
    atcom.android.mediascape.activity.PhotoViewerActivity.access$6500(PhotoViewerActivity.java:125)
    atcom.android.mediascape.activity.PhotoViewerActivity$33$1.run(PhotoViewerActivity.java:4558)
    atandroid.os.Handler.handleCallback(Handler.java:587)
    atandroid.os.Handler.dispatchMessage(Handler.java:92)
    atandroid.os.Looper.loop(Looper.java:123)
    atandroid.app.ActivityThread.main(ActivityThread.java:4370)
    atjava.lang.reflect.Method.invokeNative(Native Method)
    atjava.lang.reflect.Method.invoke(Method.java:521)
    atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    atdalvik.system.NativeStart.main(Native Method)
    
    
    关于网络连接,在设计的时候可以设置个timeout的时间或者放入独立的线程来处理。
    
    关于Handler的问题,可以参考:http://developer.android.com/reference/android/os/Handler.html
    

    案例3:关键词:Memoryleak/Thread leak

    11-1621:41:42.560 I/ActivityManager( 1190): ANR in process:android.process.acore (last in android.process.acore)
    11-1621:41:42.560 I/ActivityManager( 1190): Annotation:keyDispatchingTimedOut
    11-16 21:41:42.560 I/ActivityManager(1190): CPU usage:
    11-16 21:41:42.560 I/ActivityManager( 1190):Load: 11.5 / 11.1 / 11.09
    11-16 21:41:42.560 I/ActivityManager(1190): CPU usage from 9046ms to 4018ms ago:
    11-16 21:41:42.560I/ActivityManager( 1190): d.process.acore:98%= 97% user + 0% kernel / faults: 1134 minor
    11-16 21:41:42.560I/ActivityManager( 1190): system_server: 0% = 0% user + 0% kernel /faults: 1 minor
    11-16 21:41:42.560 I/ActivityManager( 1190): adbd:0% = 0% user + 0% kernel
    11-16 21:41:42.560 I/ActivityManager(1190): logcat: 0% = 0% user + 0% kernel
    11-16 21:41:42.560I/ActivityManager( 1190): TOTAL:100% = 98% user + 1% kernel

    Cmdline: android.process.acore
    
    DALVIK THREADS:
    "main"prio=5 tid=3 VMWAIT
    |group="main" sCount=1 dsCount=0 s=N obj=0x40026240self=0xbda8
    | sysTid=1815 nice=0 sched=0/0 cgrp=unknownhandle=-1344001376
    atdalvik.system.VMRuntime.trackExternalAllocation(NativeMethod)
    atandroid.graphics.Bitmap.nativeCreate(Native Method)
    atandroid.graphics.Bitmap.createBitmap(Bitmap.java:468)
    atandroid.view.View.buildDrawingCache(View.java:6324)
    atandroid.view.View.getDrawingCache(View.java:6178)
    atandroid.view.ViewGroup.drawChild(ViewGroup.java:1541)
    ……
    atcom.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1830)
    atandroid.view.ViewRoot.draw(ViewRoot.java:1349)
    atandroid.view.ViewRoot.performTraversals(ViewRoot.java:1114)
    atandroid.view.ViewRoot.handleMessage(ViewRoot.java:1633)
    atandroid.os.Handler.dispatchMessage(Handler.java:99)
    atandroid.os.Looper.loop(Looper.java:123)
    atandroid.app.ActivityThread.main(ActivityThread.java:4370)
    atjava.lang.reflect.Method.invokeNative(Native Method)
    atjava.lang.reflect.Method.invoke(Method.java:521)
    atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    atdalvik.system.NativeStart.main(Native Method)
    
    "Thread-408"prio=5 tid=329 WAIT
    |group="main" sCount=1 dsCount=0 s=N obj=0x46910d40self=0xcd0548
    | sysTid=10602 nice=0 sched=0/0 cgrp=unknownhandle=15470792
    at java.lang.Object.wait(Native Method)
    -waiting on <0x468cd420> (a java.lang.Object)
    atjava.lang.Object.wait(Object.java:288)
    atcom.android.dialer.CallLogContentHelper$UiUpdaterExecutor$1.run(CallLogContentHelper.java:289)
    atjava.lang.Thread.run(Thread.java:1096)
    分析:
    

    atdalvik.system.VMRuntime.trackExternalAllocation(NativeMethod)内存不足导致block在创建bitmap上

    **MEMINFO in pid 1360 [android.process.acore] **
    
            native dalvik other total
    
            size: 17036 23111 N/A 40147
    
            allocated: 16484 20675 N/A 37159
    
            free: 296 2436 N/A 2732
    
    解决:如果机器的内存族,可以修改虚拟机的内存为36M或更大,不过最好是复查代码,查看哪些内存没有释放
    
    展开全文
  • Android ANR处理

    2019-10-12 10:01:07
    某书时不时就看不了了,不知道是我电脑问题还是啥,我就当个...1, 你碰到ANR了吗 在App使用过程中, 你可能遇到过这样的情况: ANR 恭喜你, 这就是传说中的ANR. 1.1 何为ANR ANR全名Application Not Respondin...
  • AndroidANR处理

    2017-05-08 17:08:48
    一:什么是ANR ANR:Application Not Responding,即应用无响应 二:ANR的类型 ANR一般有三种类型: 1:KeyDispatchTimeout(5 seconds) --主要类型 按键或触摸事件在特定时间内无响应 2:Broadcast...
  • AndroidANR

    2019-09-24 14:33:58
    Android开发者不会对ANR陌生,它和崩溃一样是程序设计的问题。这里介绍什么是ANR,出现场景,如何避免以及如何定位分析ANR 一、什么是ANR ANR全称Application Not Responding,意思就是程序未响应。如果一个应用...
  • 前言 ...ANR即Application Not Responding,顾名思义就是应用程序无响应。在Android中,一般情况下,四大组件均是工作在主线程中的,Android中的Activity Manager和Window Manager会随时监控应用
  • Android——ANR

    2019-11-05 11:11:44
    ANR机制是对应用程序主线程的限制,要求主线程在限定的时间内处理完一些最常见的操作(启动服务、处理广播、处理输入), 如果处理超时,则认为主线程已经失去了响应其他操作的能力。 场景 导致AN...
  • Android 分析ANR和死锁

    万次阅读 2016-09-22 13:35:15
    Android 分析ANR和死锁
  • AndroidANR

    2018-03-18 10:28:16
    android上,这是一个系统警告提示。产生: 一般是因为主线程(UI线程)进行耗时操作(网络或I/O和数据库操作等)导致的。 当Activiy Manager和Window Manager监控到以下情况,就会弹出ANR提示框...
  • 如果 Android 应用的界面线程处于阻塞状态的时间过长,就会触发“应用无响应”(ANR) 的错误。此时系统会向用户显示一个对话框,ANR 对话框会为用户提供强行退出应用的选项。1.2 ANR的四种类型在Android系统中,应用...
  • android ANR

    2017-11-05 22:10:24
    android 的活动管理器...android的应用程序是默认使用main线程处理所有操作的单线程结构,出现上述情况时将发生ANR。例如main线程直接从网络下载文件。如果当前网络传输速度不够,下载文件需要1min,那么完成文件下载前
  • 1, 你碰到ANR了吗 在App使用过程中, 你可能遇到过这样的情况: ANR 恭喜你, 这就是传说中的ANR. 1.1 何为ANR ANR全名Application Not... 当操作在一段时间内系统无法处理时, 系统层面会弹出上图那样的ANR对话框. 1
  • Android ANR

    2020-05-12 16:52:40
    文章目录Android ANR1.ANR简单介绍1.1 产生ANR的场景1.2 ANR具体时间定义2.ANR触发分析2.1 Input相关2.2 Service相关2.3Broadcast相关2.4 ContentProvider相关参考资料 1.ANR简单介绍 ANR:应用程序无响应...
  • Android-ANR

    2017-05-14 01:15:52
    参考:如何分析解决Android ANR App性能优化系列6-ANR详解一:什么是ANRANR : Application Not Responding,即应用无响应。二:ANR的类型ANR一般有三种类型: 1:KeyDispatch Timeout(5 seconds) –主要类型 按键...
  • Android中,Activity Manager 和 Window Manager system services 会监控每个程序的运行,当程序出现如下三种种情况的时候就会弹出ANR的提示对话框: 1.用户在进行了一种操作后5秒钟没有响应。 2....
  • 后台60s):广播在特定时间内无法处理完成ServiceTimeout(前台20S,200S后台):服务在特定的时间无法处理完成另外还有ProviderTimeout看门狗和等导致的ANR常见的原因A.耗时操作,如复杂的layout,庞大的for循环...
  • android - ANR keyDispatchingTimedOut

    万次阅读 2011-04-24 18:24:00
    android - ANR keyDispatchingTimedOut
  • AndroidANR详解

    千次阅读 2017-02-16 20:13:25
    Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择...
  • androidanr异常发生情况及处理办法

    千次阅读 2015-07-20 22:44:00
    1.在什么情况下回发生anr异常? 主线程阻塞的时间超过6秒钟就会有anr异常。2.一个简单导致anr异常的程序。 我们联系点击按钮,就会导致anr异常的发生。package com.example.anr;import android.app.Activity; ...
  • 首先我们要理解关于AndroidANR的一些理论知识: 1.什么是AndroidANR?  ANR顾名思义就是Application Not Response,即应用无响应。 2.ANR分为三类:  KeyDispatchTimeOut(5 秒)  BroadcastTimeOut(10...
  • 前言记得之前换工作面试的时候,面试官问我知道ANR吗?我说知道,然后让我讲了一下ANR出现的原因,我就把ANR出现的原因一通说。然后,面试官又问我那么怎么分析和解决ANR问题呢?这时候我就傻眼了,只能说分析代码了...
  • android 分析ANR问题

    2017-05-19 19:43:19
    1.2 如何分析ANR问题 引起ANR问题的根本原因,总的来说可以归纳为两类: 应用进程自身引起的,例如: 主线程阻塞、挂起、死循环 应用进程的其他线程的CPU占用率高,使得主线程无法抢占到CPU时间片 其他进程间接...
  • AndroidANR分析

    2020-03-11 10:33:31
    ANR和crash的区别:ANR不一定是由于程序的异常错误导致的,一般是应用处理长时间没有响应导致主线程不能处理下一件事情 ANR(Application not responding)即应用无响应,应用发生anr的几种类型 1 ...
  • AndroidANR问题分析

    2019-06-08 00:02:52
    AndroidANR问题分析1. 什么是ANR2. ANR的类型3.KeyDispatchTimeout4. 为什么会超时呢?5. 如何避免KeyDispatchTimeout6. UI线程7. 如何去分析ANR8.Thread状态9. 如何调查并解决ANR10.案例11. log的抓取及分析11.1 ...
  • Android系统ANR错误实战分析

    千次阅读 热门讨论 2020-11-11 18:30:23
    大家好,今天给大家带来Android系统ANR错误实战分析。在开始之前请允许我说几句不相干的话。 我叫麻锦荣,你们叫我锦荣就好了,在深圳从接触Android到现在已经有7个年头了,从最早的ADT(那会儿还没有AS)开发app...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,941
精华内容 9,176
关键字:

android处理anr