如何在子线程中创建Handler?
来源:互联网 发布:windows md文件编辑器 编辑:程序博客网 时间:2024/04/27 22:09
也许大家创建Handler都不陌生,但是如果要在子线程创建Handler,大家未必都能正确,
在子线程中创建handler,要确保子线程有Looper,UI线程默认包含Looper
我们需要用到一个特殊类
HandlerThread
这个类可以轻松的创建子线程handler
创建步骤:
1: 创建一个HandlerThread,即创建一个包含Looper的线程
HandlerThread的构造函数有两个
public HandlerThread(String name) { super(name); mPriority = Process.THREAD_PRIORITY_DEFAULT; } /** * Constructs a HandlerThread. * @param name * @param priority The priority to run the thread at. The value supplied must be from * {@link android.os.Process} and not from java.lang.Thread. */ public HandlerThread(String name, int priority) { super(name); mPriority = priority; }
这里我们使用第一个就好:
HandlerThread handlerThread=new HandlerThread("xuan");
handlerThread.start();//创建HandlerThread后一定要记得start();
通过HandlerThread的getLooper方法可以获取Looper
Looper looper=handlerThread.getLooper();
通过Looper我们就可以创建子线程的handler了
Handlr handler=new Handler(looper);
通过该handler发送消息,就会在子线程执行;
提示:如果要handlerThread停止:handlerThread.quit();
完整测试代码:
HandlerThread hanlerThread = new HandlerThread("子线程"); hanlerThread.start(); final Handler handler = new Handler(hanlerThread.getLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Log.d("----->", "线程:" + Thread.currentThread().getName()); } }; findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handler.sendEmptyMessage(100); } });
结果:
12-24 10:13:15.881 5024-5052/gitosctest.gitosc_studyproject D/----->: 线程:子线程
像在intentService(子线程)中,如果要回掉在UI线程怎么办呢?
new Handler(getMainLooper()).post(new Runnable() { @Override public void run() { // person.getName() Realm objects can only be accessed on the thread they were created. Toast.makeText(getApplicationContext(), "Loaded Person from broadcast-receiver->intent-service: " + info, Toast.LENGTH_LONG).show(); } });
2 0
- 如何在子线程中创建Handler?
- 子线程中创建handler
- 如何在子线程中直接new Handler
- 子线程创建Handler
- 在子线程中new一个Handler
- Android 直接在子线程中创建Handler为什么会报错
- 在子线程创建handler进行处理消息
- 创建子线程中的Handler
- android子线程创建handler
- Android 子线程创建handler
- handler——子线程中创建消息处理机制
- 使用Handler在子线程中更新UI
- 使用Handler在子线程中更新UI
- 使用Handler在子线程中更新UI
- 使用Handler在子线程中更新UI
- 为什么在子线程中直接new Handler会报错?
- Android--Handler的使用方法:在子线程中更新界面
- 使用Handler在子线程中更新UI
- Android 毛玻璃效果弹出菜单动画
- IntelliJ IDEA15在线激活服务器地址
- 用wamp打开进入localhost,但是无法打开localhost中的文件夹
- Mybatis3源码分析(18)-插件(plugins)拦截器
- <input type="image"标签引发的页面提交!
- 如何在子线程中创建Handler?
- Python点滴
- 腾讯云搜问题解答1——用户为什么在你的网站搜索不到想要的内容
- 减少Java垃圾收集器开销的5点建议
- #import和@class的区别
- maven项目jar包发布到私服
- 微信公共平台php收不到信息解决方法
- Dalvik——如何控制vm
- iOS_获取通讯录