`
baobaoupup
  • 浏览: 470863 次
文章分类
社区版块
存档分类
最新评论

Android线程与ANR

 
阅读更多

本人博客原文

第一部分 Android线程
Android线程模型
Android的每个进程有一个称为“main”主线程(也称UI线程)的线程。它除了负责所有事件的分发和处理,还负责4大组件的生命周期函数的调用。
更多内容请参考《Android线程模型》和《Looper和Handler
如何确定当前线程
我们可以通过打印代码的调用层次来确定当前线程。
更多内容请参考《Android中打印代码的调用层次
Handler技术
Handler用于异步消息的处理。默认情况下Handler与其创建者处于同一线程, 如果Handler里面做耗时的动作,其对应线程自然会阻塞。
更多内容请参考《关于Handler技术》和《Looper和Handler
AsyncTask技术
引入AsyncTask的目的是任务在主线程之外运行,而回调方法是在主线程中执行,以避免了使用Handler带来代码看上去非常臃肿的麻烦.
关于此的详细内容请阅读《AsyncTask简介
ThreadLocal简介
ThreadLocal的目的就是为每一个使用ThreadLocal的线程都提供一个值,让该值和使用它的线程绑定,当然每一个线程都可以独立地改变它绑定的值。
更多请参考《ThreadLocal简介
第二部分 什么是ANR
在Android中,系统会监视那些反应不够迅速的应用。如果系统发现某个应用程序反应太慢,它会显示一个叫做Application Not Responding (ANR)的对话框给用户。用户可以选择等待该应用程序让它继续,也可以选择强行结束该应用程序。虽然用户可以选择等待该应用程序让它继续,但是用户其实是非常不喜欢出现该对话框(ANR提示框)
更多的内容请参考《关于ANR的官方建议
第三部分 对付ANR的N种武器
关于此请参考《Android中对付ANR的N种武器
结束
<wbr></wbr>

分享到:
评论

相关推荐

    通过Android trace文件分析死锁ANR实例过程

    遇到ANR(Application Not Responding)是比较常见的问题,产生ANR的原因有很多,比如CPU使用过高、事件没有得到及时的响应、死锁等,下面将通过一次因为死锁导致的ANR问题,来说明如何通过trace文件分析ANR问题

    防止ANR错误HandlerThread多线程解决耗时操作MyProject.zip

    一个防止ANR错误HandlerThread多线程解决耗时操作的源码程序20210525记录学习

    ANR-WatchDog:一个简单的看门狗,可检测到Android ANR(应用程序无响应)错误并引发有意义的异常

    目录 阅读ANRError异常报告配置超时(ANR的最小挂起时间) 调试器在ANR回调上过滤报告看门狗线程捐 为什么存在目前,Android应用程序无法捕获和报告ANR错误。 如果您的应用程序不在Play商店中(要么是因为您仍在开发...

    Android ANR(Application Not Responding)的分析

    Android ANR(Application Not Responding)的分析 ANR (Application Not Responding)   ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无...

    Android开发之多线程处理、Handler详解

    但是在操作一些耗时操作时,比如I/O读写的大文件读写,数据库操作以及网络下载需要很长时间,为了不阻塞用户界面,出现ANR  Android开发过程中为什么要多线程  我们创建的Service、Activity以及Broadcast均是一个...

    ANRWatch:监听ANR

    判断ANR的方法其实很简单,我们在子线程里向主线程发消息,如果过了固定时间后,消息仍未处理,则说明已经发生ANR了。 Android应用程序的所有交互操作和响应,都是通过主线程的消息机制来进行的。例如当用户点击了...

    浅谈Android ANR在线监控原理

    Watchdog是运行一个单独的线程中的,每次wait 30s之后就会发起一个监测行为,如果系统休眠了,那Watchdog的wait行为也会休眠,此时需要等待系统唤醒之后才会重新恢复监测 想要被Watchdog监测的对象需要实现...

    Android应用程序消息处理机制

    Android应用程序与传统的PC应用程序一样,都是消息驱动的。也就是说,在Android应用程序主线程中,所有函数都是在一个消息循环中执行的。Android应用程序其它线程,也可以像主线程一样,拥有消息循环。Android应用...

    APP开发教程 Java Android移动端开发 10、Android应用程序组件之六-UI同步技术 共20页.pptx

    ANR(Android not response)现象 ANR解决方案 Android线程 主子线程交互技术 Handler/Message/Looper/MessageQueue 异步任务asynTask IntentService 广播和BrocastReceiver(*)

    Android开发中避免应用无响应的方法(Application Not Responding、ANR)

    App里发生的最糟糕的事是弹出应用无响应”Application Not Responding” (ANR) 对话框.本课讲的是如何保持应用响应,避免ANR。 什么触发ANR 通常,系统会在应用无法对用户输入响应时显示ANR。比如,如果一个应用在I/...

    android 学习笔记5-线程阻塞 UI更新

    1、查看网络上的图片 2、主线程阻塞-ANR 3、刷新UI-Handler 4、在本地缓存图片-例如微信的图片 5、获取开源代码 6、显示一个新闻客户端 7、使用GET方式提交表单数据 8、使用POST方式提交表单

    详解Android中用于线程处理的AsyncTask类的用法及

    我们写App都有一个原则,主线程不能够运行需要占用大量CPU时间片的任务,如大量复杂的浮点运算,较大的磁盘IO操作,网络socket等,这些都会导致我们的主线程对用户的响应变得迟钝,甚至ANR,这些会使应用的用户体验...

    [Android实例] Android 竖着的SeekBar.zip

    [Android实例] Android 竖着的SeekBar 需要的请下载 ...Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米)

    Android开发艺术探索.任玉刚(带详细书签).pdf

    第11章 Android的线程和线程池 391 11.1 主线程和子线程 392 11.2 Android中的线程形态 392 11.2.1 AsyncTask 392 11.2.2 AsyncTask的工作原理 395 11.2.3 HandlerThread 402 11.2.4 IntentService 403 11.3 ...

    [安卓开源项目]Android-炫酷的3D音乐播放器-各种特效OpenGL.zip

    毕设安卓源码,分享给需要的人...Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米) 如何更新UI,为什么子线程不能更新UI?(美

    Android开发艺术探索

    第11章 Android的线程和线程池 / 391 11.1 主线程和子线程 / 392 11.2 Android中的线程形态 / 392 11.2.1 Async Task / 392 11.2.2 Async Task的工作原理 / 395 11.2.3 Handler Thread / 402 11.2.4 ...

    javabiginteger源码-android_multithreading:关于android/java多线程的文档

    Android为了保证系统对用户保持高响应性,更是强制规定了在Activity的主线程中的操作不能超过5秒,Service的主线程中的操作不能超过10秒,否则会抛出ANR异常。这使得我们必须要将耗时操作转移到工作线程中去。 Tip: ...

    快速入门android AIDL(开启多进程并进行通信)

    如果仅仅在子线程中运行,一旦开启该线程的Activity被杀死后,线程也被杀死,无法实现后台运行效果,更加不合理。而如果在另外一个进程中使用service后台运行,就显得十分恰当了。 二、由于android对单个应用所使用...

    [Android实例] 面试题集.zip

    [Android实例] 面试题集 ...Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米) 如何更新UI,为什么子线程不

Global site tag (gtag.js) - Google Analytics