2013-10-27 51 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