-
Notifications
You must be signed in to change notification settings - Fork 779
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-04-24:HandlerThread 的使用场景和用法? #37
Comments
HandlerThread 是 Android 封装的一个线程类,将 Thread 跟 Handler 封装。使用步骤如下:
HandlerThread mHandlerThread = new HandlerThread("mHandlerThread");
mHandlerThread .start();
Handler mHandler= new Handler( mHandlerThread.getLooper() ) {
@Override
public boolean handleMessage(Message msg) {
//消息处理
return true;
}
});
Message message = Message.obtain();
message.what = “2”
message.obj = "骚风"
mHandler.sendMessage(message);
mHandlerThread.quit(); |
HandlerThread=Handler+Thread,是一个非常方便的封装类,要注意的是HandlerThread不会自动停止,必须手动调用quit()方法。 |
来了 我居然一直没用过HandlerThread |
HandlerThread继承Thread是一个线程类。 |
HandlerThread 本质上是一个在子线程的handler (HandlerThread=Handler+Thread); 步骤5:结束线程,即停止线程的消息循环 优势: |
IntentService就是由HandlerThread实现的 |
HandlerThread其实是Handler+thread,在内部的实现方法中就是通过获取thread的looper,来初始化Handler,HandlerThread的使用可以参考IntentService |
HandlerThread 是一个工具类。一些异步任务场景中,我们需要在子线程发消息,主线程处理消息,这种时候就需要 Thread+Handler+Looper 的组合。 Thread 负责执行耗时任务操作,Handler 负责在异步任务过程中发送消息,在子线程中使用 Handler 发送消息时,需要绑定一个子线程中的 Looper 对象,所以执行线程 run 方法时,需要去构造一个 looper 对象,并启用 loop,然后把 looper 传递给 Handler 的构造方法。 new Thread() {
@Override
public void run() {
super.run();
Looper.prepare();
Looper looper = Looper.myLooper();
mHandler = new Handler(looper);
Looper.loop();
}
}.start(); 因为开发中,经常有这样的单线程+异步任务场景,所以 Android 提供了工具类 HandlerThread,把上面的操作更严密的做了封装。 HandlerThread 继承自 Thread,跟其它线程不一样,它自带一个 Looper,同时提供一个创建 Handler 的方法,该 Handler 使用 HandlerThread 中创建的 looper,最终就是一个 HandlerThread 创建后,会对应一个单独的 Looper 跟对应的 Handler。 |
不应该是新开的子线程处理消息,主线程发送消息吗? |
异步任务都是子线程发消息,然后在主线程处理啊~ 我觉得我们认为的消息类型可能不一样。 |
HandlerThread 继承自 Thread , 它是一种可以使用 handler 的 Thread, 就是 在run 方法中通过 Looper.prepare 来创建消息队列,并通过 Looper.loop() 来开启消息循环。 普通 Thread 主要用于在 run 方法中执行一个耗时任务,而 HandlerThread 内部创建了消息队列,外界需要通过 Handler 的消息方式来通知 HandlerThread 执行具体任务。HandlerThread 的具体使用场景是 IntentService。IntentService 封装了 HandlerThread 和 Handler 。HandlerThread 主要用来处理需要顺序执行的异步操作。 由于 HandlerThread 的 run 是一个无线循环,因此当明确不需要 HandlerThread 时可以通过 quit 或 quitSafely 来终止线程的执行。 使用方法:
|
带有消息循环的thread |
com.orhanobut.logger就是HandlerThread 实现的 |
HandlerThread继承于Thread 是一个线程类 在run方法中通过Looper.prepare来创建消息队列并通过Looper.loop()来开启消息循环 通过创建HandlerThread来启动一个子线程的Handler来做一些耗时操作 比如数据查询 |
No description provided.
The text was updated successfully, but these errors were encountered: