本人博客原文
第一部分 Android线程
Android线程模型
Android的每个进程有一个称为“main”主线程(也称UI线程)的线程。它除了负责所有事件的分发和处理,还负责4大组件的生命周期函数的调用。
如何确定当前线程
我们可以通过打印代码的调用层次来确定当前线程。
Handler技术
Handler用于异步消息的处理。默认情况下Handler与其创建者处于同一线程, 如果Handler里面做耗时的动作,其对应线程自然会阻塞。
AsyncTask技术
引入AsyncTask的目的是任务在主线程之外运行,而回调方法是在主线程中执行,以避免了使用Handler带来代码看上去非常臃肿的麻烦.
ThreadLocal简介
ThreadLocal的目的就是为每一个使用ThreadLocal的线程都提供一个值,让该值和使用它的线程绑定,当然每一个线程都可以独立地改变它绑定的值。
第二部分 什么是ANR
在Android中,系统会监视那些反应不够迅速的应用。如果系统发现某个应用程序反应太慢,它会显示一个叫做Application Not Responding (ANR)的对话框给用户。用户可以选择等待该应用程序让它继续,也可以选择强行结束该应用程序。虽然用户可以选择等待该应用程序让它继续,但是用户其实是非常不喜欢出现该对话框(ANR提示框)
第三部分 对付ANR的N种武器
结束
<wbr></wbr>
分享到:
相关推荐
遇到ANR(Application Not Responding)是比较常见的问题,产生ANR的原因有很多,比如CPU使用过高、事件没有得到及时的响应、死锁等,下面将通过一次因为死锁导致的ANR问题,来说明如何通过trace文件分析ANR问题
一个防止ANR错误HandlerThread多线程解决耗时操作的源码程序20210525记录学习
目录 阅读ANRError异常报告配置超时(ANR的最小挂起时间) 调试器在ANR回调上过滤报告看门狗线程捐 为什么存在目前,Android应用程序无法捕获和报告ANR错误。 如果您的应用程序不在Play商店中(要么是因为您仍在开发...
Android ANR(Application Not Responding)的分析 ANR (Application Not Responding) ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无...
但是在操作一些耗时操作时,比如I/O读写的大文件读写,数据库操作以及网络下载需要很长时间,为了不阻塞用户界面,出现ANR Android开发过程中为什么要多线程 我们创建的Service、Activity以及Broadcast均是一个...
判断ANR的方法其实很简单,我们在子线程里向主线程发消息,如果过了固定时间后,消息仍未处理,则说明已经发生ANR了。 Android应用程序的所有交互操作和响应,都是通过主线程的消息机制来进行的。例如当用户点击了...
Watchdog是运行一个单独的线程中的,每次wait 30s之后就会发起一个监测行为,如果系统休眠了,那Watchdog的wait行为也会休眠,此时需要等待系统唤醒之后才会重新恢复监测 想要被Watchdog监测的对象需要实现...
Android应用程序与传统的PC应用程序一样,都是消息驱动的。也就是说,在Android应用程序主线程中,所有函数都是在一个消息循环中执行的。Android应用程序其它线程,也可以像主线程一样,拥有消息循环。Android应用...
ANR(Android not response)现象 ANR解决方案 Android线程 主子线程交互技术 Handler/Message/Looper/MessageQueue 异步任务asynTask IntentService 广播和BrocastReceiver(*)
App里发生的最糟糕的事是弹出应用无响应”Application Not Responding” (ANR) 对话框.本课讲的是如何保持应用响应,避免ANR。 什么触发ANR 通常,系统会在应用无法对用户输入响应时显示ANR。比如,如果一个应用在I/...
1、查看网络上的图片 2、主线程阻塞-ANR 3、刷新UI-Handler 4、在本地缓存图片-例如微信的图片 5、获取开源代码 6、显示一个新闻客户端 7、使用GET方式提交表单数据 8、使用POST方式提交表单
我们写App都有一个原则,主线程不能够运行需要占用大量CPU时间片的任务,如大量复杂的浮点运算,较大的磁盘IO操作,网络socket等,这些都会导致我们的主线程对用户的响应变得迟钝,甚至ANR,这些会使应用的用户体验...
[Android实例] Android 竖着的SeekBar 需要的请下载 ...Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米)
第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 ...
毕设安卓源码,分享给需要的人...Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米) 如何更新UI,为什么子线程不能更新UI?(美
第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 ...
Android为了保证系统对用户保持高响应性,更是强制规定了在Activity的主线程中的操作不能超过5秒,Service的主线程中的操作不能超过10秒,否则会抛出ANR异常。这使得我们必须要将耗时操作转移到工作线程中去。 Tip: ...
如果仅仅在子线程中运行,一旦开启该线程的Activity被杀死后,线程也被杀死,无法实现后台运行效果,更加不合理。而如果在另外一个进程中使用service后台运行,就显得十分恰当了。 二、由于android对单个应用所使用...
[Android实例] 面试题集 ...Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米) 如何更新UI,为什么子线程不