Android中Handle类的首要效果:
1.在新发动的线程中发送给音讯
2.在主线程获取、处理音讯
为什么要用Handle这样的一个机制:
由于在Android体系中UI操作并不是线程安全的,假如多个线程并发的去操作同一个组件,或许导致线程安全问题。为了处理这一个问题,android拟定了一条规矩:只允许UI线程来修正UI组件的特点等,也便是说有必要单线程模型,这样导致假如在UI界面进行一个耗时叫长的数据更新等就会构成程序假死现象 也便是ANR反常,假如20秒中没有完结程序就会强制封闭。所以比方另一个线程要修正UI组件的时分,就需要凭借Handler音讯机制了。
Handle发送和处理音讯的几个办法:
1. void handleMessage(Message msg):处理音讯的办法,该办法通常被重写。
2.final boolean hasMessage(int what):查看音讯行列中是否包括有what特点为指定值的音讯
3.final boolean hasMessage(int what ,Object object) :查看音讯行列中是否包括有what好object特点指定值的音讯
4.sendEmptyMessage(int what):发送空音讯
5.final Boolean send EmptyMessageDelayed(int what ,long delayMillis):指定多少毫秒发送空音讯
6.final boolean sendMessage(Message msg):当即发送音讯
7.final boolean sendMessageDelayed(Message msg,long delayMillis):多少秒之后发送音讯
与Handle作业的几个组件Looper、MessageQueue各自的效果:
1.Handler:它把音讯发送给Looper办理的MessageQueue,并担任处理Looper分给它的音讯
2.MessageQueue:选用先进的办法来办理Message
3.Looper:每个线程只要一个Looper,比方UI线程中,体系会默许的初始化一个Looper目标,它担任办理MessageQueue,不断的从MessageQueue中取音讯,并将
相对应的音讯分给Handler处理
在线程中运用Handler的过程:
1.调用Looper的prepare()办法为当时线程创立Looper目标,创立Looper目标时,它的结构器会主动的创立相对应的MessageQueue
2.创立Handler子类的实例,重写HandleMessage()办法,该办法处理除UI线程以外线程的音讯
3.调用Looper的loop()办法来发动Looper
实例
xmlns:tools=http://schemas.android.com/tools
android:layout_width=match_parent
android:layout_height=match_parent
android:paddingBottom=@dimen/activity_vertical_margin
android:paddingLeft=@dimen/activity_horizontal_margin
android:paddingRight=@dimen/activity_horizontal_margin
android:paddingTop=@dimen/activity_vertical_margin
tools:context=.MainActivity >
android:id=@+id/ed1
android:layout_width=match_parent
android:layout_height=wrap_content
android:inputType=number />
android:id=@+id/Ok
android:layout_width=match_parent
android:layout_height=wrap_content
android:layout_below=@id/ed1
android:text=@string/Ok />
android:id=@+id/next
android:layout_width=match_parent
android:layout_height=wrap_content
android:layout_below=@id/Ok
android:text=下一张 />
android:id=@+id/image1
android:layout_width=match_parent
android:layout_height=match_parent
android:layout_below=@id/next
android:src=@drawable/a3 />