import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import androidx.annotation.NonNull;
import java.lang.ref.WeakReference;
public class MyHandlerThread implements Runnable {
/**
* mReadyFence对象通过synchronized保护mReady/mRunning两个变量
*/
private Object mReadyFence = new Object();
private boolean mReady;
private boolean mRunning;
private MyHandler mHandler;
public void start() {
synchronized (mReadyFence) {
if (mRunning) {
return;
}
mRunning = true;
new Thread(this, "TestThread").start();
while (!mReady) {
try {
mReadyFence.wait();
} catch (InterruptedException ie) {
// ignore
}
}
}
mHandler.sendEmptyMessage(MSG_START);
}
public void stop() {
mHandler.sendEmptyMessage(MSG_STOP);
mHandler.sendMessage(mHandler.obtainMessage(MSG_QUIT));
}
public boolean isRunning() {
synchronized (mReadyFence) {
return mRunning;
}
}
public void frameAvailable() {
synchronized (mReadyFence) {
if (!mReady) return;
}
mHandler.sendEmptyMessage(MSG_FRAME);
}
@Override
public void run() {
Looper.prepare();
synchronized (mReadyFence) {
mHandler = new MyHandler(this);
mReady = true;
mReadyFence.notifyAll();
}
Looper.loop();
synchronized (mReadyFence) {
mReady = mRunning = false;
mHandler = null;
}
}
private final static int MSG_START = 1;
private final static int MSG_STOP = 2;
private final static int MSG_FRAME = 3;
private final static int MSG_QUIT = 4;
private class MyHandler extends Handler {
private WeakReference<MyHandlerThread> mWeakThread;
public MyHandler(MyHandlerThread thread) {
mWeakThread = new WeakReference<MyHandlerThread>(thread);
}
@Override
public void handleMessage(@NonNull Message msg) {
switch (msg.what) {
case MSG_START:
handleStart();
break;
case MSG_STOP:
handleStop();
break;
case MSG_FRAME:
handleFrame();
break;
case MSG_QUIT:
Looper.myLooper().quitSafely();
break;
}
}
}
private void handleStart() {
}
private void handleStop() {
}
private void handleFrame() {
}
}
Java系列-Handler + Thread用法
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 本文可以和另外一篇文章结合起来看,Android消息机制之——Handler Looper源码分析 在Handle...
- 写在前面的话 并发编程里面,线程池这个一直就想写一篇文章来总结下,但是直到并发编程系列的第12篇才写的原因是线程池...
- 本篇是我学习Java的多线程编程的备忘录,仅是我自己学习多线程时的一些片面理解,希望多多少少能帮助到观看本文的朋友...
- 在Java多线程系列(三)Thread类中的部分方法一章中我们说了几个Thread类中的方法,本文继续 线程中断方...
- 前言 感谢王宝令老师极客时间的并发系列课程 我们曾经把并发编程领域的问题总结为三个核心问题:分工、同步和互斥。其中...