-1

アプリのユーザーがスプラッシュ スクリーンの長さを変更できるようにしようとしています。Preferences.xml で EditTextPreference を作成し、デフォルト値を 5 に設定しました。キーは「期間」です。SharedPreferences を使用し、getLong メソッドを使用してフィールドの値を取得し、それを Thread の sleep メソッドのパラメーターとして使用できると考えました。

これが私のコードです:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
long dur = prefs.getLong("duration", 5);
final long duration = dur*1000; //convert from seconds to milliseconds

Thread timer = new Thread() {
    public void run() {
        try{
            sleep(duration);
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
        finally {
            Intent openMenu = new Intent("com.heh.blah.MENU");
            startActivity(openMenu);
        }
    }
};
timer.start();

設定が変更されない限り、このコードは問題なく機能します。ただし、設定に移動して期間の設定を変更すると(変更せずに、ボックスでデフォルト値の5で「OK」を押すか、キャンセルを押しても)、アプリを閉じると、次回開くと、画面が数秒間すべて白くなり、次にすべて黒くなり、その後クラッシュして、「残念ながら、アプリが停止しました」というメッセージが表示されます。ポップアップボックス。アプリのデータを消去すると、アプリを再び正常に起動できます (ただし、5 秒間のスプラッシュ スクリーンが表示されます)。

更新: 何もクリックしたり変更したりせずに環境設定を開くだけで、次回の起動時にクラッシュします。

この問題について何か助けていただければ幸いです!!!

ありがとう、マックス

4

1 に答える 1