@Override public void onDestroy() { super.onDestroy(); log("--- ON DESTROY ---"); unregisterReceiver(mGattUpdateReceiver); mBluetoothLeService = null; // 解除蓝牙服务 unbindService(mServiceConnection); // 结束子线程 closeCamera(); DisConnectSocket(); // 关闭监听socket,结束阻塞状态,才能结束线程 stopRecvThread(); stopBroadcastThread(); stopSendThread(); mBroadcastThread.quitSafely(); mRecvThread.quitSafely(); mCameraThread.quitSafely(); mSendThread.quitSafely(); // 释放 lock wl.release(); }
/** 初始化线程 */ private void initThread() { mBroadcastThread = new HandlerThread("broadcast thread"); mBroadcastThread.start(); mBroadcastHandler = new Handler(mBroadcastThread.getLooper()) { @Override public void handleMessage(Message msg) { log("开启广播ip线程"); while (mBroadcastFlag) { // 发送广播信号 try { sendBrocast(); Thread.sleep(500); } catch (InterruptedException e) { log(e.getMessage()); } catch (Exception e) { log(e.getMessage()); } } log("关闭广播ip线程"); super.handleMessage(msg); } }; // 接收数据线程 mRecvThread = new HandlerThread("receivethread"); mRecvThread.start(); mRecvHandler = new Handler(mRecvThread.getLooper()) { @Override public void handleMessage(Message msg) { log("开启接收线程!"); while (mRecvFlag) { try { recvData(); } catch (Exception e) { log("接收线程异常"); log(e.getMessage()); } } log("结束接收线程!"); super.handleMessage(msg); } }; mCameraThread = new CameraThread("camerathread"); mCameraThread.start(); mCameraHandler = new Handler(mCameraThread.getLooper()) { @Override public void handleMessage(Message msg) { switch (msg.what) { case CameraThread.OPENCAMERA: // 打开相机 mCameraThread.openCamera(); break; case CameraThread.CLOSECAMERA: // 关闭相机 mCameraThread.closeCamera(); break; case CameraThread.TAKEPICTURE: // 关闭相机 mCameraThread.takePicture(); break; } super.handleMessage(msg); } }; mSendThread = new HandlerThread("sendthread"); mSendThread.start(); mSendThreadHandler = new Handler(mSendThread.getLooper()) { @Override public void handleMessage(Message msg) { log("开启发送线程!"); try { if (mSendSocket != null) { mSendSocket.close(); mSendSocket = null; } mSendSocket = new DatagramSocket(remotePort); } catch (SocketException e1) { log("new socket 异常"); log(e1.getMessage()); } byte[] sendData; while (mSendThreadFlag) { try { synchronized (sendQueue) { if (!sendQueue.isEmpty()) { sendData = sendQueue.remove(0).toByteArray(); sPacket = new DatagramPacket( sendData, sendData.length, InetAddress.getByName(remoteIP), remotePort); mSendSocket.send(sPacket); } } Thread.sleep(10); } catch (Exception e) { log("未打开网络"); log(e.getMessage()); } } // 关闭资源 if (mSendSocket != null) { mSendSocket.close(); mSendSocket = null; } log("结束发送线程"); super.handleMessage(msg); } }; }
private void startCameraThread() { Utils.logMethod(CLASS_TAG); cameraThread = new CameraThread(); cameraThread.start(); }