java在PreferenceActivity中显示ProgressDialog
当我试图在onPreferenceChange
侦听器中显示ProgressDialog
(简单的微调器类型)时,我遇到了一个非常有趣的问题
public class SettingsActivity extends PreferenceActivity {
private ProgressDialog dialog;
public void onCreate(Bundle savedInstanceState) {
ListPreference pref= (ListPreference) findPreference("myPreference");
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
dialog = ProgressDialog.show(SettingsActivity.this, "", "Doing stuff...", true);
SystemClock.sleep(2000);
}
return true;
}
}
会显示ProgressDialog
,但直到方法(sleep
在本例中)完成。我做错了什么
# 1 楼答案
您正在主UI线程上睡觉,这会阻止操作系统处理应用程序的事件。这将阻止你的应用程序重新绘制,正如你所发现的,可以阻止新窗口实际出现
不要睡觉,试试以下方法:
# 2 楼答案
您可以使用
AsyncTask
在单独的线程中运行函数(请参见http://developer.android.com/resources/articles/painless-threading.html)如果您只想调用
sleep
方法,那么这可能有点不必要,但即使对于其他会阻塞UI线程的方法也应该有效你可以这样做:
然后使用下面的代码调用它: