Android应用程序被迫关闭背景颜色变化?

时间:2013-10-27 09:17:58

标签: 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秒钟,然后更改背景颜色,而不会将其轰炸出来。

提前致谢!

4 个答案:

答案 0 :(得分:0)

无法在线程

中完成UI操作
 v.setBackgroundColor(Color.RED); 

从最后删除上面的行并使用runOnUIthread()更新最后的UI。

,您的最终代码将如下所示

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();
        }

答案 1 :(得分:0)

在UI线程上处理视图状态:

v.post(new Runnable() {
    @Override
    public void run() {
        v.setBackgroundColor(Color.RED);
    }
});

有关它的更多信息:http://developer.android.com/guide/components/processes-and-threads.html

答案 2 :(得分: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

答案 3 :(得分:0)

解决此问题的解决方案: -

  • 更新你的应用
  • 清除Gmail存储空间数据
  • 清除应用缓存和数据
  • 重置应用偏好设置
  • 重置智能手机出厂设置

我在YouTube的帮助下找到了这些步骤。

以下是该链接: -

youtube.com/watch?v=fx8Fv8RXag8