-1

背景がランダムな間隔で色が変わる実験アプリを構築しています。

私は背景の変更にこだわっています。

背景色を変更する作業コードがありますが、それをスレッド/トライ アンド キャッチ ブラケットに入れると、アプリケーションは強制的に閉じられ、エラーは発生しませんか?

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

4 に答える 4

0

カスタム スレッドから UI スレッドにアクセスすることはできません。UIスレッドでランナブルを実行する必要があります。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。これにより、その問題が処理されます。ここ、そしてここ

于 2013-10-27T09:30:10.177 に答える
0

この問題を解決するための解決策:-

  • アプリを更新する
  • Gmail ストレージ データの消去
  • アプリのキャッシュとデータを消去する
  • アプリの設定をリセット
  • スマートフォンの工場出荷時の設定をリセットする

YouTube の助けを借りてこれらの手順を見つけました。

ここにそのリンクがあります: -

youtube.com/watch?v=fx8Fv8RXag8

于 2013-10-28T15:02:06.443 に答える
0

UI スレッドでビュー ステートを操作します。

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

詳細: http://developer.android.com/guide/components/processes-and-threads.html

于 2013-10-27T09:24:16.313 に答える