Изменение цвета фона не имеет эффекта после поворота экрана

все, что я новичок в Android, и теперь я столкнулся с странной проблемой, проблема в том, что

"Получение TCP-сообщения, а затем изменение цвета фона графического интерфейса не влияет, как только экран был повернут".

Что я хочу архивировать:

Попросите приложение APP, работающее на устройстве Android, подключиться к ПК через TCP. ПК может отправить строку в APP, тогда APP сделает что-то на основе полученной строки. В этом случае строка "изменить цвет фона земли на красный (с вибрацией телефона)/черный" отправляется в APP через TCP, поэтому пользователь Android увидит ослепляющий эффект с вибрацией.

В чем проблема:

Я могу архивировать то, что хочу. Но как только экран повернут, цвет не может быть изменен, останется только вибрация.

Что я пробовал:

Я помещаю кнопку на APP, которая вручную инициирует событие изменения цвета (с вибрацией). Он отлично работает, даже если я поворачиваю экран.

Дальнейший тест показывает, что пользовательский интерфейс, такой как цвет фона и анимация изменения, вызванный чтением TCP, исчез, однако мелодия и вибрация остаются неизменными.

Я загружаю видео на 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);
             }
        }
    };

Что я хочу знать?

Если бы кто-то мог найти решение, было бы очень полезно.

Что такое платформа? Сервер ПК: Win7 64bits VS2010 С# Android-платформа: 4.0 Samsung S2 Разработка IDE: Motodev SDK API: Android 3

Ответы

Ответ 1

Android будет воссоздавать всю активность при повороте экрана - поэтому, вероятно, ваша переменная "mScreen" не будет указывать на экземпляр, который фактически отображается на экране после вращения.

Вы можете избежать, что андроид воссоздает активность, как описано здесь: http://developer.android.com/guide/topics/resources/runtime-changes.html

Ответ 2

Одним из решений было бы заблокировать экран, чтобы он не мог быть повернут? (Или, по крайней мере, заблокировать его во время этой функции.)

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);