2010-11-08 41 views
3

您好我在我的應用程序調用OnCreate()通過網絡檢索一些數據,並顯示一個不確定的進度欄,同時下載的AsyncTask。Android AsyncTask和

問題是,當我啓動應用程序屏幕保持空白,直到AsyncTask完成。代碼就是這樣的。

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    loadData(); 
    //Several UI Code 
    startAsyncTasks(); 
} 


private void startAsyncTasks(){ 
    new ConnectingTask().execute(); 
} 
+0

所以,如果你註釋掉startAsyncTasks()線,用戶界面顯得快得多? – 2010-11-08 15:41:40

+2

這可能值得發佈你的AsyncTask的代碼,因爲問題可能出在那裏。 – 2010-11-08 16:12:27

+0

只要確保你在ConnectingTask.doInBackGround()中完成所有的網絡連接(長時間運行的東西)。這應該可以保證主UI不會在繁重的工作中被阻塞,因此它將能夠顯示活動的UI元素。 – 2010-11-08 21:35:08

回答

1

OnCreate中()被執行在屏幕上被顯示的活動之前,所以整個數據下載過程示出了活動之前執行。

解決方案可能是在OnStart()方法中啓動AsyncTask,而不是在OnCreate()中(也會覆蓋)。當活動將顯示在屏幕上時執行OnStart()(請參閱活動生命週期)。

這是我在我的應用程序中實現的情況,它的工作原理。您應該在OnStart()方法中顯示進度對話框,並在適​​當的時候在AsyncTask中更新和解除它。

這是它的外觀在我的應用程序:

  1. 的AsyncTask在活動的OnStart()與顯示
  2. 數據在內部類下載擴展的AsyncTask
  3. 數據後對話框一起啓動(OnPostExecute())

缺點可能是OnStart()在第一次活動調用時被調用,還可以在恢復之後(例如在最小化應用程序之後)。因此,AsyncTask可以在與OnCreate()相反的地方執行幾次,只有一次 - 在創建活動時(而不是在恢復時)。

也可能存在一些問題,如果你做這樣的活動的JUnit測試用的AsyncTask對話 - 讓我知道,如果你這樣做 - 將發佈一些解決方案