Handlerhandler=newHandler(){@OverridepublicvoidhandleMessage(Messagemsg){// 在这里处理消息}}; 1. 2. 3. 4. 5. 6. 这段代码创建了一个匿名内部类的 Handler 对象,并重写了 handleMessage() 方法。 步骤2:创建主线程的 Looper 对象 在主线程中,调用 Looper 的 prepare() 方法来创建主线程的 Looper 对...
Handler handler = newHandler(); 1. 如果想要在非主线程中创建Handler对象,首先需要使用Looper类的prepare()方法来初始化一个Looper对象,然后创建这个Handler对象,再使用Looper类的loop()方法启动Looper,从消息队列里获取和处理消息。 public class LooperThread extends Thread{ public Handler handler1; //声明一个Ha...
我们可以使用Looper和Handler来实现 创建一个子线程并初始化 Looper publicclassMyThreadextendsThread{@Overridepublicvoidrun(){// 创建 Looper 实例Looper.prepare();// 准备 LooperHandlerhandler=newHandler();// 创建 Handler,默认与当前线程的 Looper 关联// 启动消息循环Looper.loop();// 注意:在 Looper.loop...
使用Looper.myLooper可以取得当前线程的Looper对象。 使用mHandler =newHandler(Looper.myLooper());可产生用来处理当前线程的Handler对象。 使用mHandler =newHandler(Looper.getMainLooper()); 可诞生用来处理main线程的Handler对象。 使用Handler传递消息对象时将消息封装到一个Message对象中,Message对象中主要字段如下: Mes...
(R.id.tv_text); // 在UI线程中开启一个子线程 new Thread(new Runnable() { @Override public void run() { // 在子线程中初始化一个Looper对象 Looper.prepare(); handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { ...
由于Andoird的UI元素采用的单一线程模型,只能在UI线程进行更新,于是我们用来更新UI,常用Handler进行更新,用法如下: mHandler=newHandler(Looper.getMainLooper(),newHandler.Callback(){publicbooleanhandleMessage(Messagemsg){//do ui updatereturnfalse;}});Messagemessage=newMessage();mHandler.sendMessage(message);...
privateLooper(boolean quitAllowed){mQueue=newMessageQueue(quitAllowed);mThread=Thread.currentThread();} 之后,一个线程就有了MessageQueue,虽然还没有调用Loop.loop()将线程变成loop线程,但是new Handler已经没问题。接着看handler.post函数,它将会创建一个Message(如果需要),并将Message插入到MessageQueue,供loop线程...
平时开发,handler用的比较多,handler会关联一个线程,并且会有一个Looper维护一个消息队列,handler会发送消息或者Runnable到消息队列,然后Looper会从消息队列里面获取消息,然后通过handler去执行。但是只是知其用法,大致了解其原理,并没有去详细去了解过,于是乎,我决定看看源码,看看handler、looper、message之间到底是如何运作...
public Handler(Callback callback, boolean async) { mLooper = Looper.myLooper(); if (mLooper == null) { throw new RuntimeException( "Can't create handler inside thread that has not called Looper.prepare()"); } mQueue = mLooper.mQueue; mCallback = callback; mAsynchronous = async; }...
普通的new Thread肯定不行。因为new Handler不崩溃的前提是当前线程存在Looper,而App主线程的Looper在...