android 服务及页面中的多个线程 的问题 线程android数据 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 似乎是activity中的线程影响了服务中的线程?这种情况怎么解决啊。 我也不明白,自己学的糊里糊涂的,我是服务中放着一个线程,不断接收数据。在页面中的那个线程用了个for循环,要不断的监测上一组数据是否接收完了,然后发下一组数据的序号出去,然后继续接收数据。这两个线程都算耗时的吧?我把代码贴上来 //-----------定义读取按钮,发送 将返回数据显示在列表中--------------- 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()); } }; 求指点……looper?lock?什么什么…… 我以前也发现有出现死循环的情况,这组数接收完还未发送下一组数的序号时,线程跳到接收数据的线程,于是就陷入等待。所以后来用了个looper(不理解,所以可能用的不对),但是问题还是存在,接收数据的线程会卡在中间不往下运行,然后就提示stuck on别的线程。是线程之间相互影响了?感觉像是两个线程在掐架,有的时候用很多sleep会好一点。有没有什么好的方法可以解决一下这些线程之间的问题? 增加了延时,情况会好一点,但是还是会出现这个问题。提示信息如下: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 172800003-26 11:13:06.108: E/ThermalEngine(282): ACTION: CPU - Setting CPU[1] to 172800003-26 11:13:06.108: E/ThermalEngine(282): ACTION: CPU - Setting CPU[2] to 172800003-26 11:13:06.108: E/ThermalEngine(282): ACTION: CPU - Setting CPU[3] to 172800003-26 11:13:06.348: E/dalvikvm(27076): Fatal spin-on-suspend, dumping threads03-26 11:13:06.438: E/dalvikvm(27076): threadid=2: stuck on threadid=13, giving up03-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 这句错误提示的资料,也没有解决方案。是线程被冲突了吗?那应该怎么样做才能让两个线程相安无事呢? 两个Activity之间的跳转 实现手机蓝牙与某非安卓设备通信 Menu设置图标问题? 请教,mp3文件的ID3V2标签 android百度地图搜索功能实现 关于Android Framework层文件操作的问题 求思路,搜索方面的 android 客户端利用socket和服务端通信中文乱码 这是什么情况求大神啊!!! 谁有中文 TTS 源码demo? android源码change notes在哪里可以查看到? 你的android app在运行过程中占用内存多少?
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());
}
};
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 这句错误提示的资料,也没有解决方案。是线程被冲突了吗?那应该怎么样做才能让两个线程相安无事呢?