当前位置: 代码迷 >> Android >> 屏幕翻转和蓝牙通信阻塞有关问题
  详细解决方案

屏幕翻转和蓝牙通信阻塞有关问题

热度:27   发布时间:2016-04-28 00:49:07.0
屏幕翻转和蓝牙通信阻塞问题
1.我想实现横屏、竖屏时候显示不同界面,但是翻转屏幕会调用ondestroy和oncreate函数。程序中的数据怎么办?

2.我开发了一个蓝牙通信的程序,在2.3.4的手机上不会阻塞,在4.2.2的手机上会阻塞,这是怎么回事?
代码如下:
 private int read(int count,int timeout){
         long startTime=System.currentTimeMillis();
long readTime = 0;
       int readCount = 0;
       int i=1;
int availableCount = 0;

         while(readTime < timeout){
         try {
         i++;
         Log.d(TAG, "read available:");
availableCount = mmInStream.available();
Log.d(TAG, "available:"+availableCount);
if(availableCount > 0)//有数据再读 避免阻塞
{
if(availableCount <= count - readCount)
{
readCount += mmInStream.read(buffer, readCount, availableCount);
}
else
{
readCount += mmInStream.read(buffer, readCount, count - readCount);
}
}
Log.d(TAG, "read:"+readCount);
if(readCount >= count)
{
break;
}
readTime = System.currentTimeMillis() - startTime;  
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
    
     } catch (IOException e) {
                 mHandler.obtainMessage(MainActivity.MESSAGE_READ, -1, -1, buffer).sendToTarget();
                 connectionLost();
                 break;
     }
         }
         Log.d(TAG, "get " + readCount+",time "+readTime+",i="+i+"\r\n");
         return readCount;
        }
比如回复的数据长度是10,count=100;在2.3.4手机上,会一直循环,直到超时;但是4.2.2的手机上,收到10个字节以后就阻塞在mmInStream.available();这了,这从log里面能看出来,知道断开连接才会退出阻塞。这个怎么解决?我不希望一直在这阻塞着
------解决思路----------------------
1.问题一实现起来有多种方式,如果两个act之间切换的话保存数据就需要通过静态变量,intent,DB....保存数据,如果是一个ACT两个布局,那用onSaveInstanceState保存就可以了。当然也可以用到前面的静态DB等方法
2.2.3可以在主线程 中通信,4.2就不能,会不会跟这个有关系?如果不希望阻塞那用线程 读取一下呢?加个超时控制!
------解决思路----------------------
有一个东西叫:
android:configChanges="orientation
------解决思路----------------------
screenSize
------解决思路----------------------
keyboardHidden
------解决思路----------------------
keyboard
------解决思路----------------------
navigation"
  相关解决方案