前言
Android沿用了Java的线程模型,除了Thread外,Android还实现了AsyncTask、HandlerThread、IntentService,它们的底层实现也是线程。
本文讲的是IntentService
相关文章阅读
AsyncTask
IntentService
1 使用步骤
//1.创建HandlerThread,可以执行线程名
val mHandlerThread = HandlerThread("ThreadName:小猪")
//2.启动线程
mHandlerThread.start()
//3.创建工作线程
val mWorkerHandler = Handler(mHandlerThread.looper){
//TODO 小猪时间管理速成实现?
true
}
//4.发送消息
val message = mWorkerHandler.obtainMessage()
message.obj = intent
mWorkerHandler.sendMessage(message)
//5.结束线程
mHandlerThread.quit()
//或者使用此方法结束线程
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
mHandlerThread.quitSafely()
}
最后需要注意Handler因为不是静态类可能造成的内存泄漏
问题。
2 原理
既然底层实现是Thread,那么核心方法一定是在run
方法中,我们可直接查看run方法
@Override
public void run() {
mTid = Process.myTid();
//1创建消息队列
Looper.prepare();
synchronized (this) {
//2 通过ThreadLocal获取Looper
mLooper = Looper.myLooper();
//HandlerThread内部的getLooper方法有wait操作,需要唤醒。
notifyAll();
}
Process.setThreadPriority(mPriority);
onLooperPrepared();
//3 开启循环
Looper.loop();
mTid = -1;
}
总结
HandlerThread在内部创建了消息队列,通过Handler的来通知HandlerThread执行具体任务。