Android中有时候我们使用线程也可以通过Handler来创建,也方便管理,最近项目中也用到需要一个延时操作,我是通过handler来构建一个线程,然后延时多久执行某个动作,但是后来发现,通过handler构建的线程竟然运行在UI线程。
代码:
myHandler = new Handler();
myHandler.postDelayed(new Runnable() {
@Override
public void run() {
Log.i("handlerThread", "thread2:"
+ Thread.currentThread().getName() + ";"
+ Thread.currentThread().getId());
}
}, 1000);
以上代码其实是执行在UI线程中的。
后来上网发现,确实是如此,一直以来都是错误的,于是研究了下,如果想使用handler创建线程,必须使用HandlerThread为handler绑定一个线程,然后使用looper来初始化一个handler
代码:
//创建HandlerThread对象
HandlerThread mHandlerThread = new HandlerThread("testThread");
//必须start
mHandlerThread.start();
//为线程创建一个Looper
Looper mLooper=mHandlerThread.getLooper();
//创建handler,通过绑定一个looper消息管理,即这个Handler是运行在mHandlerThread这个线程中
myHandler = new Handler(mLooper);
这样线程就执行在工作线程了。
UI线程:
onCreate()方法打印log
`
// 主线程
Log.i("handlerThread", "thread1:" + Thread.currentThread().getName()
+ ";" + Thread.currentThread().getId());
`