我是Android的新手,现在我面临一个奇怪的问题,简而言之就是
“接收TCP消息,然后在屏幕旋转后更改GUI的背景颜色无效。”
我要存档的内容:
在Android设备上运行APP,通过TCP连接到PC。 PC可以向APP发送一个字符串,然后APP将根据收到的字符串做一些事情。 在这种情况下,一个字符串,“将地面颜色变为红色(带有手机振动)/黑色”通过TCP发送到APP,因此Android用户将看到一个带有振动的炫目效果。
有什么问题:
我可以存档我想要的内容。但是一旦屏幕旋转,颜色就无法改变,只剩下振动。
我尝试了什么:
我在APP上放了一个按钮,手动触发换色事件(带振动)。即使我旋转屏幕也能正常工作。
进一步的测试表明,TCP读取引起的更改背景颜色和动画等UI操作已经消失,但铃声和振动保持不变。
我将视频上传到Youtube http://youtu.be/n0gxXzzf-bo
下面是java代码,按钮和TCP调用相同的方法:ChangeColor()
public void ChangeColor(){
Thread t= new Thread(new ChangeColorTest());
t.start();
}
public class ChangeColorTest implements Runnable{
public void run() {
try {
for(int i=0;i<3;i++){
mBlinkHandler.sendEmptyMessageDelayed(1, 0);
Thread.sleep(300);
mBlinkHandler.sendEmptyMessageDelayed(2, 0);
Thread.sleep(300);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Handler mBlinkHandler = new Handler(){
@Override
public void handleMessage(Message msg){
super.handleMessage(msg);
// mScreen = (LinearLayout)findViewById(R.id.mylinerlayout);
if(msg.what==1){
mScreen.setBackgroundColor(Color.RED);
Vibratoration();
}else if(msg.what==2){
mScreen.setBackgroundColor(Color.BLACK);
}
}
};
我想知道什么?
如果有人能够找到解决方案,我们将非常感激。
我的平台是什么? 服务器PC:Win7 64位VS2010 C# Android平台:4.0三星S2 开发IDE:Motodev SDK API:Android 3
答案 0 :(得分:3)
一种解决方法是锁定屏幕,使其无法旋转? (或至少在此功能期间将其锁定。)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
答案 1 :(得分:2)
Android会在您旋转屏幕时重新创建整个活动 - 所以可能是您的变量&#34; mScreen&#34;不会指向旋转后在屏幕上实际可见的实例。
你可以避免,android重新创建活动,如下所述: http://developer.android.com/guide/topics/resources/runtime-changes.html