从App Preferences获取线程睡眠持续时间

时间:2013-07-25 22:58:41

标签: android sharedpreferences thread-sleep

我正在尝试允许我的应用的用户更改启动画面的长度。我在我的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秒闪屏)。

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

非常感谢任何有关此问题的帮助!!!

谢谢, 最大

1 个答案:

答案 0 :(得分:2)

最好在UI线程上向Message发送延迟Handler