2013-10-27 124 views
-1

因此,我正在構建一個實驗應用程序,其中背景將隨機更改顏色。Android應用程序強制關閉背景顏色變化?

我被卡在背景變化。

我有改變背景顏色的工作代碼,但是當我把它放在一個線程/ try和catch括號中時,應用程序被強制關閉並且不會給我一個錯誤?

這裏是在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線程線。你必須在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,這爲你處理這個問題。 Herehere

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

解決方案來解決這個問題: -

  • 更新您應用
  • 清除Gmail的存儲數據
  • 清除應用緩存和數據
  • 重置應用偏好
  • 重置智能手機的出廠設置

我在幫助中找到了這些步驟的YouTube。

這裏是鏈接: -

youtube.com/watch?v=fx8Fv8RXag8