【发布时间】:2012-10-17 18:51:49
【问题描述】:
我是 android 的菜鸟,我试图在启动画面之后的 OnCreate 方法期间显示进度对话框。目前,在我的启动画面之后,屏幕黑屏大约 5 秒钟,然后出现布局。我正在使用 Asynctask 来执行我的后台操作,所以我不明白为什么在应用程序初始化时没有出现进度对话框而不是 5 秒的黑色。这仅适用于 Android 3.0 及更低版本。所有后续 sdk 版本都会正确显示进度对话框。任何帮助是极大的赞赏。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//wakelock
PowerManager pM = (PowerManager)getSystemService(Context.POWER_SERVICE);
wL = pM.newWakeLock(PowerManager.FULL_WAKE_LOCK, "Screen Dim");
wL.acquire();
LoadingData dataLoaded = new LoadingData();
dataLoaded.execute("");
---code for UI Thread---
}//--End onCreate
private class LoadingData extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... sUrl) {
try {
//TWITTER API CODE HERE
} catch (Exception e) {
Log.e("log_tag", "Error parsing data "+ e.toString());
}
publishProgress(33);
//DOWNLOADING IMAGES CODE HERE
try{
}catch(Exception e){
}
publishProgress(66);
//FOREX RATES CODE HERE
try {
}catch(JSONException e) {
Log.e("log_tag", "Error acquiring forex data "+e.toString());
}
publishProgress(100);
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog (GoldandSilverCoinCalculatorActivity.this);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setMessage("Loading... please wait");
dialog.setIndeterminate(false);
dialog.setMax(100);
dialog.setProgress(0);
dialog.show();
}
@Override
protected void onProgressUpdate(Integer... progress) {
super.onProgressUpdate(progress);
dialog.setProgress(progress[0]);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
dialog.dismiss();
}
}
----编辑---- 我的 OnResume 和 OnPause 方法
@Override
protected void onPause() {
// TODO Auto-generated method stub
compass.disableCompass();
super.onPause();
wL.release();
lm.removeUpdates(this);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
compass.enableCompass();
super.onResume();
wL.acquire();
lm.requestLocationUpdates(towers, 500, 1, this);
}
【问题讨论】:
-
在 --- UI 线程的代码--- 中有什么?在整个 OnCreate 完成之前,您的对话框不会显示。所以你的 UI 初始化可能需要很长时间
-
这是我为布局实例化按钮、微调器、文本视图和编辑文本的地方。
-
确保您的 onCreate/onStart/onResume 中没有位图操作或处理密集型代码。
-
请检查我的编辑。我刚刚发布了我的 onPause 和 OnResume。这些操作会阻塞我的 UI 线程吗?
-
这段代码没有阻塞!我不知道为什么会这样!我建议记录您的代码以确保没有任何东西阻止您的 onCreate
标签: android android-layout android-asynctask progress-bar progressdialog