Android串口通讯,在线程里一直监听是否有消息发来,接收到消息到runOnUiThread处理跳转页面,页面跳转关闭之后,在发送消息尽然还会执行在打开页面?
2017-01-01 10:03
519 查看
我写了一个线程,在线程里死循环一直在监听接收单片机给我发来的消息,接收到之后,进到处理数据的方法里,方法里面有个runOnUiThread线程,用来更新ui信息,当接收到我需要跳转页面的信息时,执行跳转页面,并关闭当前页面(activity1)。但是跳转之后,在新页面(activity2)接收消息,它尽然会在activity1页面在接收一次,在次执行了一遍跳转之前的代码。之后就会恢复正常。
也就是说,activity1页面如果是执行跳转activity2页面的话,它会吧同一个页面打开两次。如果在activity1页面在跳转前还有接收显示信息的话,那么我接收5条信息,第一次接收它会在activity1页面显示,跳转之后我在activity2页面在发送接收5条信息,它还是会在activity1页面接收,但之后就好正常了。
下面是源码:
private class ReadThread extends Thread {
@Override
public void run() {
super.run();
while (!isInterrupted()) {
int size;
try {
byte[] buffer = new byte[30];
if (mInputStream == null)
return;
mInputStream.read(buffer);
size=Integer.parseInt(Integer.toHexString(buffer[2]))+3;
if (size > 3) {
onDataReceived(buffer, size);
}
} catch (IOException e) {
e.printStackTrace();
return;
}
}
}
}
void onDataReceived(final byte[] buffer, final int size) {
// TODO Auto-generated method stub
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "接收成功"+reString,
Toast.LENGTH_SHORT).show();
Intent intent=new Intent(Main1Activity.this,Main2Activity.class);
startActivity(intent);
Main2Activity.this.finish();
}
});
也就是说,activity1页面如果是执行跳转activity2页面的话,它会吧同一个页面打开两次。如果在activity1页面在跳转前还有接收显示信息的话,那么我接收5条信息,第一次接收它会在activity1页面显示,跳转之后我在activity2页面在发送接收5条信息,它还是会在activity1页面接收,但之后就好正常了。
下面是源码:
private class ReadThread extends Thread {
@Override
public void run() {
super.run();
while (!isInterrupted()) {
int size;
try {
byte[] buffer = new byte[30];
if (mInputStream == null)
return;
mInputStream.read(buffer);
size=Integer.parseInt(Integer.toHexString(buffer[2]))+3;
if (size > 3) {
onDataReceived(buffer, size);
}
} catch (IOException e) {
e.printStackTrace();
return;
}
}
}
}
void onDataReceived(final byte[] buffer, final int size) {
// TODO Auto-generated method stub
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "接收成功"+reString,
Toast.LENGTH_SHORT).show();
Intent intent=new Intent(Main1Activity.this,Main2Activity.class);
startActivity(intent);
Main2Activity.this.finish();
}
});
相关文章推荐
- 给线程发送消息让它执行不同的处理
- android 监听GPS是否打开跳转到设置GPS
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作.这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积
- Android ThreadUtil 线程公共类,判断是否在主线程/ 子线程执行 相关操作
- 给线程发送消息让它执行不同的处理
- java.lang.RuntimeException: 将消息发送到死的线程上处理程序的处理程序 (android.os.Handler)
- Android非UI主线程中,若干普通Java线程使用Handler发送接收消息
- C#操作串口,带异常处理,解决端口占用时打开串口出现异常错误,串口关闭时发送数据报错
- Android学习—— Handler 的消息发送,在新的线程处理消息
- C#操作串口,带异常处理,解决端口占用时打开串口出现异常错误,串口关闭时发送数据报错
- Android新起线程 http请求数据发送 handler接收处理
- Android 接收推送消息跳转到指定页面的方法
- Android Notification PendingIntent:当前App被kill 掉之后,当前App发送的Notification消息是否会被自动清除掉 ?
- 给线程发送消息让它执行不同的处理(自己建立消息循环,非常有意思) good
- Android: 如何利用Handler处理和发送消息来实现页面刷新的功能
- CLR 无法从 COM 上下文 0x1a2740 转换为 COM 上下文 0x1a28b0,这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作
- android:检查系统是否开启消息通知权限,app应用点击开启通知时跳转到app详情页面开启权限
- 利用主线程与子线程间的消息通讯,实现任务处理队列.子线程中创建不会阻塞执行的窗口
- Android 系列 4.11使用活动线程队列和处理程序在线程之间发送消息
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作.这种情况通常会影响到