我正在尝试允许我的应用的用户更改启动画面的长度。我在我的preferences.xml中创建了一个EditTextPreference,并给它一个默认值5.关键是“duration”。我想我可以使用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();
只要不更改首选项,此代码就可以正常工作。但是,如果我进入首选项并更改持续时间首选项(即使我没有更改它,只需单击框中的默认值为“ok”并按下取消)并关闭应用程序,下次它打开,屏幕全白显示几秒钟,然后全黑,然后崩溃,我得到“不幸的是,应用程序停止了”。弹出框。清除应用数据可让应用再次正常启动(但使用5秒闪屏)。
更新:只需打开首选项,即使没有更改单击或更改任何内容,也会在下次启动时崩溃。
非常感谢任何有关此问题的帮助!!!
谢谢, 最大
答案 0 :(得分:2)
最好在UI线程上向Message
发送延迟Handler
。