我是android的noob,我试图在我的splashscreen之后在OnCreate方法中显示progressdialog。目前,我的飞溅屏幕后,屏幕黑色约5秒,然后布局出现。我正在使用一个Asynctask来完成我的后台操作,所以我不明白为什么progressdialog不会在应用程序初始化时出现,而不是5秒的黑色。这只适用于Android 3.0及更低版本。所有后续的sdk版本都会正确显示progressdialog。任何帮助是极大的赞赏。问题与Asynctask和progressdialog?
@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初始化过程中可能会花费很长时间 –
这就是我为我的布局实例化按钮,旋转器,文本视图和editexts的地方。 –
确保onCreate/onStart/onResume中没有位图操作或处理密集型代码。 –