Example #1
0
 @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();
 }
Example #2
0
  /** 初始化线程 */
  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();
 }