2013-10-27 3 views
-1

, поэтому я создаю приложение эксперимента, в котором фон будет менять цвет в произвольные интервалы.Android-приложение вынуждено закрываться при изменении цвета фона?

Я застрял на фоне изменения.

У меня есть рабочий код, который меняет цвет фона, но когда я помещаю его в поток/try и catch bracket, приложение принудительно закрывается и не дает мне ошибку?

Вот код, который работает при использовании в OnCreate метод:

View view = this.getWindow().getDecorView(); 
view.setBackgroundColor(Color.RED); 

Но когда я хочу, чтобы сделать это «сон» в течение 1 секунды, а затем изменить его на красный, это бомбы вне.

Обратите внимание, что этот метод является отдельным методом из oncreate и вызывается изнутри и не будет работать по какой-либо причине?

public void changeBackground(final View v){ 
Thread timer = new Thread(){ 
    public void run(){ 
     try{ 
      sleep(1000); 
     }catch (InterruptedException e) { 
      e.printStackTrace(); 
     }finally{ 
      v.setBackgroundColor(Color.RED); 
     } 
    } 
}; 
timer.start(); 
} 

Что я делаю неправильно? Что мне нужно: Когда приложение запустится, оно должно подождать 1 секунду, а затем изменить цвет фона без его взрыва.

Заранее благодарен!

ответ

0

Вы не можете получить доступ к UI поток из пользовательских нить. Вы должны запустить runnable в потоке пользовательского интерфейса. Измените метод changeBackground к следующему,

public void changeBackground(final View v) { 
    Thread timer = new Thread() { 
     public void run() { 
      try { 
       sleep(5000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } finally { 
       v.setBackgroundColor(Color.RED); 
      } 
     } 
    }; 
    this.runOnUiThread(timer); 
} 

Или вы можете использовать Asynctask, это обрабатывает этот вопрос для вас. Here, и here.

0

операции UI не может быть сделано в тему

v.setBackgroundColor(Color.RED); 

Удалить выше линии от наконец и использовать runOnUIthread() для обновления пользовательского интерфейса в конце концов.

и окончательный код будет выглядеть следующим образом

public void changeBackground(final View v){ 
     Thread timer = new Thread(){ 
      public void run(){ 
       try{ 
        sleep(1000); 
       }catch (InterruptedException e) { 
        e.printStackTrace(); 
       }finally{ 

        runOnUiThread(new Runnable() { 

         @Override 
         public void run() { 
          // TODO Auto-generated method stub 
           v.setBackgroundColor(Color.RED); 
         } 
        }); 

       } 
      } 
     }; 
     timer.start(); 
     } 
0

решения, чтобы устранить эту проблему: -

  • Обновление позволяет вам App
  • Очистить Gmail хранения данных
  • Clear App Cache и Data
  • Сброс App Настройки
  • Сброс Smartphone Заводские настройки

Я нашел эти шаги с помощью YouTube.

Вот что ссылка: -

youtube.com/watch?v=fx8Fv8RXag8

Смежные вопросы