-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 的“确定”或点击取消)并关闭应用程序,下次它打开,屏幕全白几秒钟,然后全黑,然后崩溃,我得到“不幸的是,应用程序已停止。” 弹出框。清除应用数据可让应用再次正常启动(但会出现 5 秒的初始屏幕)。

更新:即使没有更改点击或更改任何内容,只需打开首选项就会导致它在下次启动时崩溃。

任何有关此问题的帮助将不胜感激!!!

谢谢,马克斯

4

1 回答 1

2

您最好在 UI 线程上向Messagea发送延迟。Handler

于 2013-07-25T23:08:26.083 回答