HandlerThread 的使用
来源:互联网 发布:php array_push 编辑:程序博客网 时间:2024/06/16 11:59
我们在使用Handler的时候常常会遇到一种场景:我们知道handler默认都是实现在主线程中,这时候使用handler与主线程的UI进行操作没有问题,但是当handler不在主线程中,而是在其他的子线程中,这时又该怎么进行交互呢? 另外如果在主线程的handler中需要操作费时的操作,这时为了避免ANR又该怎么办呢?(比如PushSDK与主客户端是两个相对独立的进程,在pushsdk里面的handler不是运行在主线程中,这时就需要用HandlerThread对子线程中handler进行管理)。
HandlerThead的使用还是比较简单的,见下面代码。值得注意就是在实例化HandlerThread后必须调用start()方法,不然会报空指针错。其实也不难理解,HandlerThread没有运行,当然也不会获得Looper.在后面handler中设置mHandlerThread.getLooper()时,当然就会返回一个空的Looper了,导致空指针错。
package com.vic.handler;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.HandlerThread;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;import com.vic.demo.R;public class TestHandlerThread extends Activity{private Handler mHandler = null;private Button mButton = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.test_layout);mButton = (Button) findViewById(R.id.test);//声明HandlerThreadHandlerThread mHandlerThread = new HandlerThread("testHandlerThread");mHandlerThread.start();//启动线程mHandler = new Handler(mHandlerThread.getLooper()){@Overridepublic void handleMessage(Message msg) {Toast.makeText(TestHandlerThread.this, "handler", Toast.LENGTH_LONG).show();//也可执行相关耗时操作}};mButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mHandler.sendEmptyMessage(0);}});}}代码运行结果
0 0
- HandlerThread的使用
- HandlerThread的 使用
- HandlerThread的 使用
- HandlerThread的使用
- HandlerThread的具体使用
- HandlerThread的使用
- HandlerThread 的使用
- HandlerThread的使用
- HandlerThread 的使用
- Android HandlerThread 的使用
- HandlerThread的使用
- HandlerThread 的基本使用
- android HandlerThread的使用
- HandlerThread的使用
- android-----HandlerThread的使用
- HandlerThread 的使用
- Android HandlerThread的使用
- HandlerThread 类的使用
- 数据持久化-plist
- HTML 颜色名
- centos网络配置
- 微信公众号开发:用户授权获取用户信息
- iOS耗电测试工具--batterydetective
- HandlerThread 的使用
- memcached学习笔记1(windows 7 64bit 环境下安装memcached)
- 配置Apache svn 服务器
- [LeetCode]016-3Sum-Closest
- Android 和 iOS 的区别
- week14---12月8日 JS内置对象——string、Date
- next()与nextLine()
- 一些iOS常用的第三方库和控件
- 【2015广东工业大学新生赛A】【排序 二进制数位思想】GG和女神 数字按照数值排序后取了多少个数