0

我是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); 
} 
+0

之后是什么在为--- UI线程代码---? 您的对话框将不会显示,直到整个OnCreate完成。因此,在您的UI初始化过程中可能会花费很长时间 –

+0

这就是我为我的布局实例化按钮,旋转器,文本视图和editexts的地方。 –

+0

确保onCreate/onStart/onResume中没有位图操作或处理密集型代码。 –

回答

3

要显示的AsyncTask进度对话框使用onPreExecute()的AsyncTask

@Override 
    protected void onPreExecute() 
    { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(YOUR_ACTIVITY.this); 
     pDialog.setMessage("Please wait..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); // if true, it enables to dismiss dialog with back button 
     pDialog.show(); 
    } 
+0

感谢您的回复。我仍然得到了5秒的黑屏。 –

+0

我认为问题是'// wakelock'请尝试评论所有与它相关的行并遵循我的解决方案。这应该很好。 –

+0

刚刚尝试过没有Wakelock。没有运气。 –

0

的方法逐条评论你所有的代码行数...看看需要多少5s

我觉得你的问题是,线:

super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

应该是在你的onCreate的顶部,而不是获取唤醒锁

+0

我只是尝试重新排序像你建议没有运气的行。所以我想我会一一评论我的台词。 –