2011-04-13 16 views
0

我試圖在顯示啓動畫面時從Internet中讀取17個圖像。但是,使用以下代碼,在處理過程中根本不會顯示啓動畫面。它變黑,完成並轉移到下一個活動。我認爲在處理代碼足夠好之前調用setContentView,但顯然不是。Android UI在處理其他數據時未顯示

我錯過了什麼?

感謝您的幫助。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splash); 


    // read the bitmaps 
    // Open a new URL and get the InputStream to load data from it 

    // Start reading the XML and filling the arrays 
    for (int i=0; i<16; i++) { 
     try { 
      URL aURL = new URL (districtImage[i]); 
      URLConnection conn = aURL.openConnection(); 
      conn.connect(); 
      InputStream is = conn.getInputStream(); 
      // Buffered is always good for performance 
      BufferedInputStream bis = new BufferedInputStream(is); 
      districtBitmap[i] = BitmapFactory.decodeStream(bis); 
      bis.close(); 
      is.close(); 
     } 
     catch (IOException e){ 
      Log.e ("DEBUGTAG","Cannot load remote image", e); 
     } 
    } 
    ... some more code to transit to next activity... 
} 

回答

4

當您在onCreate中執行網絡操作時,您將阻止UI線程,直到它們完成。在onCreate返回之前屏幕上不會顯示任何內容。有關避免此問題的各種方法,請參見文章Painless Threading

+0

感謝您的快速回復。讓我看看並回來。 – MikeC 2011-04-13 15:01:43

+0

通讀AsyncTask。這是要走的路。謝謝 – MikeC 2011-04-14 02:29:20

0

您是否嘗試在您的活動的onResume()中開始閱讀XML並填充數組,然後轉到下一個活動?在線程/異步任務中從網絡讀取數據。

+0

爲什麼在onCreate()中運行事件時會參與onResume()? – MikeC 2011-04-13 15:09:51

+0

在調用onResume()之前,用戶界面不會顯示給用戶。因此,在onResume()被調用後,保持onCreate()'light'並做一些沉重的事情。 – Abhilash 2011-04-13 15:16:20

+0

其實,你的UI線程很重要。 – 2011-04-13 16:40:57