小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 5918|回复: 2

安卓上位机按键反应迟钝怎么解决

[复制链接]
发表于 2014-8-21 16:12:54 | 显示全部楼层 |阅读模式
用安卓控制wifi智能小车前进后退,连续快速按键总是会出现较长的延迟。麻烦高手们看看这个线程运行是不是有点问题,谢谢啦

private Runnable mRunnable = new Runnable()
{
  public void run()
  {
   while(true)
   {
   
    if(Send_CMD_Status==0)
    {
     try
     {
      Thread.sleep(50);
      //Thread.sleep(1);
     } catch (InterruptedException e)
     {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
     continue;
    }
   
   
    if(Send_CMD_Status>0) Send_CMD_Status--;
   
    if(Cam_Reset_Status==2)
    {
     Cam_Reset_Status = 1;
     
     CmdBuffer[1] = (byte)0x01;
     CmdBuffer[2] = (byte)0x02;
     Cam_UpDown = 0x7B;
     CmdBuffer[3] = (byte)Cam_UpDown;
    }
    else if(Cam_Reset_Status==1)
    {
     Cam_Reset_Status = 0;
     
     CmdBuffer[1] = (byte)0x01;
     CmdBuffer[2] = (byte)0x01;
     Cam_LeftRight = 0x5A;
     CmdBuffer[3] = (byte)Cam_LeftRight;
     
    }
    else
    {
     Cam_Reset_Status = 0;
    }
   
    try
    {
     //连接服务器
     mSocketClient = new Socket(CtrlIp,Integer.parseInt(CtrlPort));
     //取得输入、输出流
     //mBufferedReaderClient = new BufferedReader(new InputStreamReader(mSocketClient.getInputStream()));
     //mPrintWriterClient = new PrintWriter(mSocketClient.getOutputStream(), true);
     mSocketClient.getOutputStream().write(CmdBuffer);
     //mSocketClient.getOutputStream().write(CmdBuffer);
     mSocketClient.close();
     
    // Thread.sleep(100);
     Thread.sleep(200);
    }
    catch (Exception ex)
    {
     mSocketClient = null;
    }
   
   
   
   }
   
  }
};


另附上前进后退部分的发送指令代码:


  BackWard.setOnTouchListener(new View.OnTouchListener()
  {
   public boolean onTouch(View v, MotionEvent event)
   {
    int action = event.getAction();
    switch(action)
    {
     case MotionEvent.ACTION_DOWN:
         CmdBuffer[1] = (byte)0x00;
      CmdBuffer[2] = (byte)0x02;
      CmdBuffer[3] = (byte)0x00;
      Send_CMD_Status = -1;           
         break;
     case MotionEvent.ACTION_UP:
      CmdBuffer[1] = (byte)0x00;
      CmdBuffer[2] = (byte)0x00;
      CmdBuffer[3] = (byte)0x00;
      Send_CMD_Status = 1;        
      break;
     default:
      break;
    }
    return false;
   }
  });
  
  ForWard.setOnTouchListener(new View.OnTouchListener()
  {
   public boolean onTouch(View v, MotionEvent event)
   {
    int action = event.getAction();
    switch(action)
    {
     case MotionEvent.ACTION_DOWN:
         //mPrintWriterClient.print("W");
         CmdBuffer[1] = (byte)0x00;
      CmdBuffer[2] = (byte)0x01;
      CmdBuffer[3] = (byte)0x00;
      Send_CMD_Status = -1;           
         break;
     case MotionEvent.ACTION_UP:
      CmdBuffer[1] = (byte)0x00;
      CmdBuffer[2] = (byte)0x00;
      CmdBuffer[3] = (byte)0x00;
      Send_CMD_Status = 1;        
      break;
     default:
      break;
    }
    return false;
   }
  });

回复

使用道具 举报

发表于 2014-8-21 22:09:17 | 显示全部楼层
不明白你为什么要在一个死循环里面发送呢?直接在按键按下后的onTouch事件中发送不就行了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-22 08:35:31 | 显示全部楼层
非常感谢指导,原来以为这里必须用线程完成。没想到那么简单,就是ontouch发送指令就行了,总算搞定了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-23 00:30 , Processed in 1.126922 second(s), 18 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表