アプリのユーザーがスプラッシュ スクリーンの長さを変更できるようにしようとしています。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 秒間のスプラッシュ スクリーンが表示されます)。
更新: 何もクリックしたり変更したりせずに環境設定を開くだけで、次回の起動時にクラッシュします。
この問題について何か助けていただければ幸いです!!!
ありがとう、マックス