解决方案 »

  1.   

    似乎是activity中的线程影响了服务中的线程?这种情况怎么解决啊。
      

  2.   

    我也不明白,自己学的糊里糊涂的,我是服务中放着一个线程,不断接收数据。在页面中的那个线程用了个for循环,要不断的监测上一组数据是否接收完了,然后发下一组数据的序号出去,然后继续接收数据。这两个线程都算耗时的吧?我把代码贴上来
      

  3.   

    //-----------定义读取按钮,发送  将返回数据显示在列表中---------------
        public void onReadClick(View view){
         if (!Serverison) {
    displayData("请确认连接!");
    return;
    }else {
    Thread.currentThread().interrupt();
    ReadData tReadData = new ReadData();
    new Thread(tReadData).start();
    }  
        
    }//end of onReadClick;
        class ReadData implements Runnable{
    @Override
    public void run() {
    // TODO Auto-generated method stub
    Looper.prepare();
    smsg="";smsg16="";fmsg = "";
    toSendByte(StrtoBytes("36"), 54); ;//发送十六进制36,即十进制的54,来读取最近一次的数据,并获取单片机中共存有多少组数据
    while(strlength<160);
    Log.e(TAG, "数据结尾了");
    all = Integer.parseInt(smsg.substring(5,7));//得到了一共多少组数??????
    Log.e(TAG, "all=="+all);
    Thread.currentThread();
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    for (int i = 1; i < all+1; i++) {
    Log.e(TAG, "in for 循环");
    smsg = "";smsg16 = "";
    toSendByte(StrtoBytes("44"),68);//发送44,是即将按需要读取数据的命令
    while(smsg16.length()<2);
    Log.e(TAG, "in for 循环1111111");
    smsg = "";smsg16 = "";
    toSendByte(StrtoBytes(intToHexString(i)), i);//发送十进制的数据组号、所以在此不用strtobyte函数
    while(strlength<36);
    Thread.currentThread();
    try {
    Thread.sleep(500);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    fmsg+=smsg;smsg="";smsg16="";
    onHandler.sendMessage(onHandler.obtainMessage());
    }
    Looper.loop();
    }}
    Handler onHandler = new Handler(){    
    public void handleMessage(Message msg){
    super.handleMessage(msg);
    showData.setText(fmsg);
    sv.scrollTo(0, showData.getMeasuredHeight());
    }
    };
      

  4.   

    求指点……looper?lock?什么什么……
      

  5.   

    我以前也发现有出现死循环的情况,这组数接收完还未发送下一组数的序号时,线程跳到接收数据的线程,于是就陷入等待。所以后来用了个looper(不理解,所以可能用的不对),但是问题还是存在,接收数据的线程会卡在中间不往下运行,然后就提示stuck on别的线程。是线程之间相互影响了?感觉像是两个线程在掐架,有的时候用很多sleep会好一点。有没有什么好的方法可以解决一下这些线程之间的问题?
      

  6.   

    增加了延时,情况会好一点,但是还是会出现这个问题。提示信息如下:03-26 11:13:06.108: E/ThermalEngine(282): enable_threshold: tsens_tz_sensor6 (/sys/devices/virtual/thermal/thermal_zone6/trip_point_0_type)
    03-26 11:13:06.108: E/ThermalEngine(282): enable_threshold: tsens_tz_sensor6 (/sys/devices/virtual/thermal/thermal_zone6/trip_point_1_type)
    03-26 11:13:06.108: E/ThermalEngine(282): ACTION: CPU - Setting CPU[0] to 1728000
    03-26 11:13:06.108: E/ThermalEngine(282): ACTION: CPU - Setting CPU[1] to 1728000
    03-26 11:13:06.108: E/ThermalEngine(282): ACTION: CPU - Setting CPU[2] to 1728000
    03-26 11:13:06.108: E/ThermalEngine(282): ACTION: CPU - Setting CPU[3] to 1728000
    03-26 11:13:06.348: E/dalvikvm(27076): Fatal spin-on-suspend, dumping threads
    03-26 11:13:06.438: E/dalvikvm(27076): threadid=2: stuck on threadid=13, giving up
    03-26 11:13:06.438: A/libc(27076): Fatal signal 16 (SIGSTKFLT) at 0x000069c4 (code=-6), thread 28257 (Thread-1448)

    03-26 11:13:06.498: E/ThermalEngine(282): enable_threshold: tsens_tz_sensor6 (/sys/devices/virtual/thermal/thermal_zone6/trip_point_0_type)
    03-26 11:13:06.498: E/ThermalEngine(282): enable_threshold: tsens_tz_sensor6 (/sys/devices/virtual/thermal/thermal_zone6/trip_point_1_type)差了很多资料,查不到关于threadid = * truck on threadid= * giving up 这句错误提示的资料,也没有解决方案。是线程被冲突了吗?那应该怎么样做才能让两个线程相安无事呢?