handler与anr机制】的更多相关文章

1. handler 参考资料:http://blog.csdn.net/ly502541243/article/details/52062179/ 首先说明Android的两个特性: 1. 只能在主线程中更新UI,子线程不能更新. 2. 在主线程中不能执行需要耗时过长的方法.(如果有耗时长的方法就扔到子线程去) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools…
可能是出于性能的考虑,Android的UI操作是非线程安全的. 也就是说,如果你在一个新开的线程中直接操作UI是会引发异常的. 但是,Android又规定,不要去阻塞UI线程!否则,轻者引起程序卡顿,重者直接引发臭名昭著的“ANR”异常. 为了解决这一种矛盾,Android引入了Handler来解决这个问题. Handler有两种常见的用法: 第一种是“发送信息”,我们可以将我们要改变的参数通过Message发送给指定的Handler,然后在Handler中的handleMessage方法中进行…
先说为什么须要Handler: Android的主线程又叫UI线程,用于处理与UI相关的时间.Android仅仅同意在主线程中改动UI组件,当我们在其它线程中须要改动UI界面时.就须要发送消息到主线程,再由主线程来处理UI的改动事件. 在UI线程中运行耗时操作或网络操作,否则会抛出ANR ("Application Not Responding")异常或NetworkOnMainThreadExceptionwill异常. 在这些时候.我们用Handler来进行消息的传递和处理. 以下…
最经面试中,技术面试中有一个是Handler的消息机制,细细想想,我经常用到的Handler无非是在主线程(或者说Activity)新建一个Handler对象,另外一个Thread是异步加载数据,同时当他加载完数据后就send到主线程中的那个Handler对象,接着Handler来处理,刚才发送的一些消息. public class HandlerTestActivity extends Activity { private TextView tv; private static final i…
学习android线程时,直接在UI线程中使用子线程来更新TextView显示的内容,会有如下错误:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 大致意思就是:只有创建这个控件的线程才能去更新该控件的内容. android中,如果要操作UI,都必须在UI线程,即主线程中去做,我们不能直…
在实际项目当中,一个很常见的需求场景就是在根据子线程当中的数据去更新ui.我们知道,android中ui是单线程模型的,就是只能在UI线程(也称为主线程)中更新ui.而一些耗时操作,比如数据库,网络请求,I/O等都是在其他线程中进行的,那么此时就需要在不同线程中进行通信了,而我们最常用的方式就是Handler. 常见的使用方式如下: public class HandlerTestActivity extends AppCompatActivity { public static final S…
Handler,Looper,MessageQueue的基本原理(三个组成一个消息处理机制)最大的作用就是实现线程间的通信 Handler负责把消息对象加入到消息队列当中 Looper(循环器)是一个循环,不停从消息队列当中向外取出消息对象,如果没有消息对象可以取出,那么Looper的代码将会产生阻塞(处于等待状态) Looper将消息对象取出来之后,Looper将会调用Handler的handleMessage方法来处理消息对象 Handler基本运行机制的例子: MainActivity.j…
当工作线程给主线程发送消息时,因为主线程是有looper的,所以不需要初始化looper,注意给谁发消息就关联谁的handler,此时用的就是主线程的handler handler会把消息发送到MessageQueue队列中,looper会不断的去遍历MessageQueue队列,当一有消息时就会回调handler的handleMessage方法! 当主线程给工作线程发消息时,关联的是子线程的handler,子线程是没有looper的.所以我们需要调用Looper.prepare(),初始化一个…
一.什么是UI线程 当程序第一次启动的时候,Android会同时启动一条主线程( Main Thread). 主要负责处理与UI相关的事件. 二.UI线程存在的问题 出于性能优化考虑,Android的UI操作并不是线程安全的,意味着如果多个线程并发操作UI线程,可能导致线程安全问题. 为了解决这个问题,Android规定:只允许UI线程修改Activity里的UI组建. 三.消息传送机制作用 为了解决Android应用多线程问题—Android平台只允许UI线程修改Activity里的UI组建,…
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 最近创建了一个群,方便大家交流,群号:55032675 上一篇博客介绍了Android异步消息处理机制,如果你还不了解,可以看:Android 异步消息处理机制 让你深入理解 Looper.Handler.Message三者关系 .那篇博客的最后,提出可以把异步消息处理机制不仅仅是在MainActivity中更新UI,可以用到别的地方,…